P1107 最大整数
题目描述
设有n个正整数 (n<=20), 将它们连接成一排, 组成一个最大的多位整数.
例如: n=3时, 3个整数13, 312, 343连接成的最大整数为: 34331213
又如: n=4时, 4个整数7,13,4,246连接成的最大整数为: 7424613
输入输出格式
输入格式:
n n个数
输出格式:
连接成的多位数
输入输出样例
输入样例#1: 复制
3 13 312 343
输出样例#1: 复制
34331213
输入样例#2: 复制
4 7 13 4 246
输出样例#2: 复制
7424613 string可以直接比较大小,并且是按字典序排序,但是这个题并不是单纯的字典序排序,看这个样例
6
321 32 407 135 13 217
应该输出的是:4073232121713513
这样的话我们可以用string a+b>b+a来表示这样的大小关系,例如string a=12 b=32 a+b=1232 b+a=3212 (先按string的大小排序,然后再按长度排序,长度小的在前面)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 50 using namespace std; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } string a[N]; int cmp(string a,string b) { return a+b>b+a; } int main() { int n=read(); for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) cout<<a[i]; return 0; }
时间: 2024-10-11 10:52:21