标题:数字积木
取消只看楼主
Julien
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2014-12-12
结帖率:0
已结贴  问题点数:10 回复次数:3 
数字积木
  二、数字积木(brick.pas/c/cpp)
【问题描述】
     小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?
     你的任务就是读入n个数字积木,求出所能形成的最大数。
【问题输入】
第一行是一个整数n (n≤1000),接下来n行每行是一个正整数。
【问题输出】
     所能形成的最大整数
【样例输入】
3
13
131
343
【样例输出】
34313131
【数据范围】
30%的数据,n≤l0,每个数<103。50%的数据,n≤l00。100%的数据,n≤1000,每个数<10200。

谁能发一下c++的参考程序
搜索更多相关主题的帖子: 突发奇想 正整数 
2015-12-01 13:49
Julien
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2014-12-12
得分:0 
能说一下大概思路吗
2015-12-02 13:00
Julien
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2014-12-12
得分:0 
二、数字积木(brick.pas/c/cpp)
    算法分析:
    本题每个数都比较大,所以用字符串操作。
    朴素算法是求出所有排列,求出其中能拼成的最大值,这样能拿30分左右。
    一种贪心策略是单纯地比较字符串间的大小,把大的放在前面。但很快就能发现反
例,例如:“131”>“13”,但“13113”<“13131”。那我们再考虑一下拼接后的情况,在操作时,将单纯地比较字符串大小变成比较“拼接”后的字符串大小就可以了。例如:比较131和13,因为“13113”<“13131”,所以13应该比131大,应排在131前面。
    所以只有用一个排序算法,把两个字符串的大小比较改为“拼接”后的字符串大小比
较就行了。
能分析一下吗
2015-12-02 13:36
Julien
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2014-12-12
得分:0 
明白了,谢谢
2015-12-02 16:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-459782-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.270881 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved