SSL 1078
洛谷 P1107 最大整数
题目描述
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
var
s,i,n,j:longint;
t:string;
a:array[1..100]of string;
begin
readln(n);
for i:=1 to n do
begin
read(s);
str(s,a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if (a[i]+a[j])<(a[j]+a[i]) then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
end;
for i:=1 to n do
write(a[i]);
end.
重点在排序阶段,要判断,是这个字符串加上之前的字符串大,还是另一个字符串加上之前的字符串大,很难,但可以用它们自身来排序:
1和10
110>101
这就是利用自身来排序的精髓。
啊哈!
本博客探讨如何使用贪心策略将不超过20个正整数连接成最大的多位数。通过比较数字自身来排序,例如110大于101,揭示了这种方法的核心思想。
1903

被折叠的 条评论
为什么被折叠?



