主题:[讨教、讨论]一道复赛第二题。分数大大的有!
小田甜ts
[专家分:210] 发布于 2006-07-07 18:03:00
题目如下:
[B]2.设有N个正整数(N≤20),将它们连成一排,组成一个最大的多位整数。
例如:N=3时,3个整数13、312、343连成的最大整数为:34331213;
又如:N=4时,4个整数7,13,4,246连成的最大整数为:7424613;
输入:N
N个数
输出:连成的多位数。[/B]
我忘了这是哪一年的题了.
我总是不能讨论完全,谁能告诉我该怎么做?
我并不需要源代码,只要算法就行了,但要保证:
·能保证正确性。
·具有较强的通用性,可计算性。
·表述清楚。
至于评分,我是这样的:
0分:没有任何算法,或算法完全不正确,或算法根本无法令人所理解,或已有人在之前提出与之类似或相同的算法。
10分:能提供正确的算法,但几乎没有可行性。或所提供的算法有较多错误。
20分:能提供较为完善、可行的算法,但有少数错误。
30分:算法正确且具有较强的可行性。
回复列表 (共16个回复)
沙发
iverson1987 [专家分:10] 发布于 2006-07-07 16:39:00
用数组,接着比较第一个数字的大小,然后再按照从大到小输出
板凳
小田甜ts [专家分:210] 发布于 2006-07-07 16:48:00
回1楼:21,2 怎么排?
而且说的不是很清楚。
3 楼
绿步甲 [专家分:1610] 发布于 2006-07-07 17:51:00
这题问题在于如何判断两个数谁放前谁放后。
输入两个数,先判断大小,在大数中由高位起向右取小数的位数,在与小数比较,大的放前面,如果相同,则取大数的后一位与小数的各位比较,大的放前面。
4 楼
小田甜ts [专家分:210] 发布于 2006-07-07 17:58:00
3楼:12 12?
5 楼
绿步甲 [专家分:1610] 发布于 2006-07-07 18:27:00
当然,如果两数相等,就不交换~~~
6 楼
小田甜ts [专家分:210] 发布于 2006-07-07 18:40:00
?12,122
7 楼
绿步甲 [专家分:1610] 发布于 2006-07-07 19:20:00
直接A+B和B+A比较一下
如果A+B>B+A
则算作A>B
8 楼
贺天行宝 [专家分:2300] 发布于 2006-07-07 19:21:00
我觉得,既然n<=20,那么其实直接深搜比较好,把每种排放可能都列出来比较。
时间复杂度较高,加上剪枝应该就没问题了
而且程序简单
9 楼
绿步甲 [专家分:1610] 发布于 2006-07-07 19:32:00
深搜效率不高
就用7楼的方法
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;
10 楼
贺天行宝 [专家分:2300] 发布于 2006-07-07 19:36:00
没错!我想起来这道题目了!对的,就是这种做法!
我来回复