题目

描述:设有n个正整数,将它们依次连成在一排,组成一个多位数,现在要求可能组成的多位数中最大的多位数是什么?

例如:n=3时,3个整数13,312,343连成的最大多位数为:343-312-13。

例如:n=4时,4个证书7,13,4,246连成的最大多位数为:7-4-246-13。

输入:n个整数,EOF结尾。

输出:最大的多位数。

算法分析

  此题很容易想到使用贪心法。

  把整数按从大到小的顺序连接起来,测试题目的例子也都符合,但最后测试的结果却不全对。按这种贪心标准,我们很容易找到反例:12,121 应该组成12121而非12112,那么是不是相互包含的时候就从小到大呢?也不一定,如:12,123 就是12312而非12112,这样情况就有很多种了。

  是不是此题不能用贪心法呢?

  其实此题是可以用贪心法来求解,只是刚才的贪心标准不对,正确的贪心标准是:先把整数化成字符串,然后再比较a+b和b+a,如果a+b>b+a,就把a排在b的前面,反之则把a排在b的后面。

  举例说明正常的字符串比较缺陷!如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,所以A+B > B+A ,而实际上'32132' < '32321'。

  所以,自定义一种字符串的比较规则:

  如果A+B>B+A,则我们认为A>B。

  且可以证明:如果A+B>=B+A,B+C>=C+B,则一定有:A+C>=C+A。

  这样一来,程序就很简单了。分3步:

  (1)先把n个数字转换成字符串存储;

  (2)按照自定义的规则把n个字符串从大到小排序;

  (3)依次输出这些字符串。

代码

 #include <iostream>
#include <sstream>
#include <string>
#include <vector> using namespace std; string int2str(int num) {
stringstream ss;
ss << num;
return ss.str();
} int main()
{
vector<string> v;
int num; while (cin>>num) {
v.push_back(int2str(num));
}
for (unsigned int i = ; i < v.size()-; i++) {
for (unsigned int j = ; j < v.size()-i-; j++) {
if ((v[j] + v[j+]) < (v[j+]+v[j])) {
swap(v[j], v[j+]);
}
}
} for (unsigned int i = ; i < v.size(); i++) {
cout<<v[i];
}
return ;
}

最新文章

  1. sql 将查询结果为多行一列合并为一行一列
  2. POJ 1743 Musical Theme
  3. AutoIt3(AU3)开发的分辨率快速设置工具
  4. POJ2309 -- BST
  5. Delphi文件夹的操作
  6. EasyUI中combotree允许多选的时候onSelect事件会重复触发onCheck事件
  7. VS代码生成工具ReSharper使用手册:配置快捷键
  8. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)
  9. 02.python基础知识_02
  10. windows7 创建http 服务器
  11. 安卓Button-TextView-EditText综合运用
  12. vue methods 中方法的相互调用
  13. html 入门 &quot;地表最强&quot;干货 你值得拥有
  14. vue-学习系列之vue双向绑定原理
  15. pycharm 如何进行全部搜索
  16. 将cmd中命令输出保存为TXT文本文件
  17. java 检查异常 和 非检查异常
  18. SSM框架中,配置数据库连接的问题
  19. 4、CommonChunkPlugin提取公共js-提取多个
  20. java无符号Byte

热门文章

  1. mysql 全文搜索的FULLTEXT
  2. linux用户、组管理及权限(一)
  3. 【kd-tree】bzoj2648 SJY摆棋子
  4. 10. Software, Software Engineering, water fall (瀑布模型),Code Complete等名词的来源
  5. kettle etl
  6. vpn与局域网冲突解决方案
  7. Asp.Net Web API 2第三课——.NET客户端调用Web API
  8. ASP.NET Web API 跨域访问
  9. 进程状态转换、CPU调度算法
  10. 用Redis打造URL缩短服务