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;}

运行结果





原创粉丝点击