题目描述
设有 n 个正整数a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 nn 个整数,表示给出的 n个整数 ai。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1复制
3 13 312 343
输出 #1复制
34331213
输入 #2复制
4 7 13 4 246
输出 #2复制
7424613
说明/提示
对于全部的测试点,保证 1 \leq n \leq 201≤n≤20,1 \leq a_i \leq 10^91≤ai≤109
思路:单纯的拼接比较大小,使用字符串string,且string可以直接比较拼接后大小(很重要),可使用swap()交换位置。不宜使用int,不好判断谁在前更大。
在进行前后比较时,i=1;j=i+1;
以此类推使用循环,符合数学规律。使用双层循环:完全遍历(相当于冒泡)。
代码:
#include<bits/stdc++.h> //string类可直接比较大小。
using namespace std; //swap()交换。
int main(){
int n;
cin>>n;
string aa[30];
for(int i=0;i<n;i++) //读几段(几个数字)
cin>>aa[i];
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){ //比较
if(aa[j]+aa[i]>aa[i]+aa[j]) //判断谁在前更大。
swap(aa[i],aa[j]); //交换
}
}
for(int i=0;i<n;i++)
cout<<aa[i]; //输出
}