回 帖 发 新 帖 刷新版面

主题:[讨教、讨论]一道复赛第二题。分数大大的有!

题目如下:
[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个回复)

沙发

用数组,接着比较第一个数字的大小,然后再按照从大到小输出

板凳

回1楼:21,2 怎么排?
而且说的不是很清楚。

3 楼

这题问题在于如何判断两个数谁放前谁放后。

输入两个数,先判断大小,在大数中由高位起向右取小数的位数,在与小数比较,大的放前面,如果相同,则取大数的后一位与小数的各位比较,大的放前面。

4 楼

3楼:12 12?

5 楼

当然,如果两数相等,就不交换~~~

6 楼

?12,122

7 楼


直接A+B和B+A比较一下
如果A+B>B+A
则算作A>B

8 楼

我觉得,既然n<=20,那么其实直接深搜比较好,把每种排放可能都列出来比较。
时间复杂度较高,加上剪枝应该就没问题了
而且程序简单

9 楼

深搜效率不高

就用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 楼

没错!我想起来这道题目了!对的,就是这种做法!

我来回复

您尚未登录,请登录后再回复。点此登录或注册