Hãy viết chương trình sau:
Nhập vào N chữ số ai, ghép các số vào nhau để tạo ra số lớn nhất
Test 1:
ghepso.inp | ghepso.out |
5 1 2 6 9 4 |
96421 |
Test 2:
ghepso.inp | ghepso.out |
5 123 789 561 7 19 |
778956119123 |
Thuật toán của mình: đối với số có một chữ số thì sort bình thường còn trong mảng mà có nhiều chữ số có các số chữ số khác nhau thì mình sẽ xác định số nào có chữ số lớn nhất rồi thêm các số vào chữ số nhỏ hơn, hiểu nôm na thì nó như thế này: trong test thứ 2, nhiều số chữ số nhất là 3 và mình sẽ đổi từ 7 thành 777(7) và 19 thành 191(19) rồi mình sắp xếp và in ra thôi. Thuật toán này khi làm ra khá dài và mình muốn tìm hiểu một thuật toán ngắn hơn, nhanh hơn. Mong các bạn giúp đỡ
Bộ test số 2 số 7 ở sau số 789 sẽ tạo ra số lớn hơn nó nhưng sao lại để số 7 ở đầu tiên nhỉ. (789756119123)
sắp xếp lại mảng rồi in ra màn hình a[1]a[2]a[3]a[n] làdc
const fi='ghepso.inp';
fo='ghepso.out';
var f1,f2:text;
a:array[1..100]of integer;
n,i,tam,j:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
{--------------------------xu-ly------------------------}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
for i:=1 to n do
write(f2,a[i]);
close(f1);
close(f2);
end.
const fi='ghepso.inp';
fo='ghepso.out';
var f1,f2:text;
a:array[1..100]of integer;
n,i,tam,j:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
{--------------------------xu-ly------------------------}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
for i:=1 to n do
write(f2,a[i]);
close(f1);
close(f2);
end.