Giúp mình bài tập về số đối xứng

G

gangoinocnha

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Nhập 1 số N, hãy cho biết có thể sắp xếp lại các chữ số của n để được số M đối xứng hay không? Nếu có hãy xuất ra M, nếu không ghi -1(0<n<=10^9)
Lưu ý:Không được chuyển từ dạng số sang dạng xâu+thuật toán tối ưu
Mình tính dùng div mod thì chắc không chạy nổi đến test n=10^9 phải không các bạn:khi (184):.
Các bạn có thuật toán nào hay giúp mình nhé.
Cảm ơn nhiều
 
C

cuong276

Nhập 1 số N, hãy cho biết có thể sắp xếp lại các chữ số của n để được số M đối xứng hay không? Nếu có hãy xuất ra M, nếu không ghi -1(0<n<=10^9)
Lưu ý:Không được chuyển từ dạng số sang dạng xâu+thuật toán tối ưu
Mình tính dùng div mod thì chắc không chạy nổi đến test n=10^9 phải không các bạn:khi (184):.
Các bạn có thuật toán nào hay giúp mình nhé.
Cảm ơn nhiều

[TEX]n=10^9[/TEX] ai bảo không test được. Khai báo nó ở dạng longint là được ngay vì giới hạn của longint lên đến hơn 2 tỉ cơ mà
Mình nghĩ cách này hơi chuối
Lưu từng chữ số của số đó vào 1 mảng
Nếu số chữ số của n chẵn và số lần xuất hiện của các chữ số cũng là số chẵn thì ta viết được ra số M. Còn nếu có 1 số mà số lần xuất hiện của chữ số đó trong số n thì ta không viết được.
Còn nếu số chữ số của n lẻ thì bắt buộc trong số n phải có 1 và chỉ 1 chữ số có số lần xuất hiện là lẻ, những chữ số còn lại thì phải có số lần xuất hiện là số chẵn. Còn nếu không thì không viết được
Mình chỉ nghĩ thuật toán như thế. Không biết là có đúng hay không.
Nếu đúng thì code không thành vấn đề
 
E

englandhuynh

Thuật của mình là thế này : dùng mảng a[1..9] vs a là số lần xuất hiện của i trong số n
Dùng div mod để tách từng phần tử ra rùi inc(a[j]) sau đó kt nếu số a là phần tử lẻ >2 thì xuất ra -1 ngược lại thì xuất m, m có thể tạo ra bằng mảng a, nếu a chẵn thì thêm vào đầu dãy a/2 phần tử, cuối dãy a/2 phần tử.
 
I

imcoming

Thuật toán của mình khác chút với của các bạn kia. bạn tách các chữa số của số vừa nhập lưu vào 1 mảng,
Sau đó kt nếu số phần tử mảng là chẵn, thì kiểm tra số thứ (n/2) và (n/2+1) nếu là bằng nhau kt tiếp tương tự như vây, bằng vòng For.
Nếu là số lẻ bạn kt ngược từ 2 đâu của dãy, bằng for và downto for phát hiện k bằng nhau cái là dừng ngay.
 
Top Bottom