1107最大整数
来源:互联网 发布:平码三中三规律算法 编辑:程序博客网 时间:2024/06/06 00:05
题目描述
设有n个正整数 (n<=20), 将它们连接成一排, 组成一个最大的多位整数.
例如: n=3时, 3个整数13, 312, 343连接成的最大整数为: 34331213
又如: n=4时, 4个整数7,13,4,246连接成的最大整数为: 7424613
输入输出格式
输入格式:n n个数
输出格式:连接成的多位数
输入输出样例
输入样例#1:
313 312 34347 13 4 246
输出样例#1:
343312137424613
自己写的代码
ERROR
#include<iostream>
#include<algorithm>
using namespace std;
struct stu{
string str;
}arr[21];
bool cmp(stu x,stu y)
{
return x.str>y.str;
}
int main()
{
int n;
while(cin>>n)
{
string str1;
for(int i=0;i<n;i++)
cin>>arr[i].str;
sort(arr,arr+n,cmp);
for(int i=0;i<n;i++)
cout<<arr[i].str;
cout<<endl;
}
}
这种直接比较字符串大小是不行的
对于测试数据
3
9 90 9
代码结果为9099
但正确结果为9990
别人提供的题解
#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#include<string>using namespace std;int n;string st[100];bool cmp(string a,string b){ return a+b>b+a;//因为a和b位数不同,所以要加起来才判断 }int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) cin>>st[i]; sort(st+1,st+n+1,cmp);//把n个字符串排序,是从大到小 for (int i=1;i<=n;i++)//输出 cout<<st[i]; return 0;}
之所以写成return (a+b > b+a),是因为在比对每两个字符串时,会比较不同拼接方式究竟哪种更大。例如,当遇到‘313’和‘9’这两个字符串时,计算机会依照字典序比较‘3139’和‘9313’的大小,哪种更大就依照哪种拼接在一起。而对这道题而言,局部判断最优可以导致全局最优,因此以上方法是可行的。
第一次见到这种字符串数组每个数组元素为字符串
#include<iostream>using namespace std;int main(){string str[3];str[0]="zhou";str[1]="xing";str[2]="xing";for(int i=0;i<3;i++)cout<<str[i]<<endl;}
运行结果
阅读全文
0 0
- 1107最大整数
- 最大整数
- 最大整数
- 最大整数
- 最大连续整数和
- C 最大整数
- SOJ-最大整数
- SCU 1117 最大整数
- SOJ--1117: 最大整数
- 最大连续整数和
- 最大整数 贪心***
- 【9603】最大整数
- 洛谷P1107 最大整数
- 贪心基础 最大整数
- uva10905 最大整数组合
- 一组整数中求出最大整数序列
- 2. 找出最大的整数
- N个数组成最大整数
- 【软件架构系列】【转】一步一步构建大型网站
- Makefile常用函数
- 【设计模式系列】之OO面向对象设计七大原则
- 【算法系列】之递归算法
- 【Jquery系列】之DOM属性
- 1107最大整数
- 【SqlServer系列】集合运算
- 【博客目录】SqlServer篇
- base64图片及图片url转base64下载
- 【SqlServer系列】AS的用法
- JAVA入门经典 笔记
- 【Sqlserver系列】CAST和CONVERT
- pata1086
- 【SqlServer系列】聚合函数