题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
示例1
输入
2 12 123 4 7 13 4 246
输出
123127424613
分析:1.为了简化处理,采用将整形直接用字符串的形式读入和写出来解决。
2.由于直接比较 a[j]与a[j+1]的大小来进行排序时,会出现问题。比如a[j]==8,a[j+1]==81;此时a[j+1]>a[j],最终会输出818,但是881>818.所以我们比较a[j]+a[j+1]与a[j+1]+a[j]的大小来进行判断。
代码:
#include<iostream> #include<string> using namespace std; int main() { string a[100],tmp; int n; while(cin >> n) { for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) { if (a[j]+a[j+1]>a[j+1]+a[j]) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } for (int i = n-1; i >=0; i--) cout << a[i]; cout<<endl; } }