haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 初中教育 > 学科竞赛学科竞赛

正整数联接

发布时间:2013-12-18 14:46:03  

正整数联接(zzslj.pas/dpr/c/cpp)

设有n个正整数,将它们联接成一排,组成一个最大的多位整数。

例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213

输入文件zzslj.in

包含二行,第一行包含一个整数n(1<=n<=20),第二行包含n个用空格分隔的整数。 输出文件zzslj.out

只有一行,一个整数(联接成的多位数).

样例

zzslj.in

4

7 13 4 246

zzslj.out

7424613

分析:将读入的n个正整数先转化成字符串保存在数组中,此题采用字符串来处理会比较方便。一般情况下,如果A与B是两个由数字字符构成的字符串且A>B,则有A+B>B+A。但是也有特例:当A=B+C时,按字符串的大小定义有A>B,而此时有可能会出现A+B<B+A的情况,如A=’121’,B=’12’,则A+B=‘12112’,B+A=‘12121’,A+B<B+A。为了解决这个问题,我们根据题意引进另一种字符串比较办法,将A+B与B+A相比较,如果前者大于后者,则认为A>B。按这一定义将所有的数字字符串从大到小排序后连接起来所得到的数字字符串即是问题的解。 var

s:array[1..20] of string;

t:string;

i,j,k,n:longint;

begin

assign(input,'zzslj.in');

reset(input);

assign(output,'zzslj.out');

rewrite(output);

readln(n);

for i:=1 to n do

begin

read(k);

str(k,s[i]);{将整数K转换成字符串}

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if s[i]+s[j]<s[j]+s[i] then{按特定要求对各数字串进行排序}

begin

t:=s[i];

s[i]:=s[j];

s[j]:=t;

end;

for i:=1 to n do write(s[i]);{输出排序后的数字串}

writeln;

close(input); close(output); end.

网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com