题目描述
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入输出格式
输入格式:
第一行,一个正整数n。
第二行,n个正整数。
输出格式:
一个正整数,表示最大的整数
The first glance I saw this problem,it’s so cushy;结果WA了一个点;sad……;
仔细想想才发现问题所在,打个比方:4 和42 两个字符串的前一部分相同,而前半部分相同的字符串,位数小的“<"位数大的,因此在比较中 4<42 ,于是按照我第一次的思路,把大的放在前面,于是得到了424,然而并不是这样,而应该是442,这样组合起来最大。
所以这时用sort对string数组排序时需要手写comp函数,
#include<cstdio> #include<cmath> #include<queue> #include<deque> #include<vector> #include<stack> #include<algorithm> #include<cstdlib> #include<cstring> #include<string> #include<iostream> #define LL long long using namespace std; string num[22]; bool cmp(string a,string b){ return a+b < b+a; } int main(){ int n; scanf("%d",&n); for(int i = 1;i <= n;i++) cin>>num[i]; sort(num+1,num+n+1,cmp); for(int i = n;i >= 1;i--) cout<<num[i]; return 0; }

京公网安备 11010502036488号