问题1描述
问题 E: 拼数
时间限制: 1.000 Sec 内存限制: 128 MB题目描述
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613输入
第一行,一个正整数n。
第二行,n个正整数。输出
一个正整数,表示最大的整数
样例输入 Copy
3 13 312 343样例输出 Copy
34331213
问题1分析和解答
本质上是字符的比较和排序,将数字进行字符串读取,用数组存储为一个个字符串,这样便于比较
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d", &n);
string arr[22];
for(int i=0;i<n;i++) cin>>arr[i];
// 本质上是冒泡排序
for(int i=0;i<n-1;i++){
for(int j=n-1;j>i;j--){
/**
* 实现字符串的升序排序
* 为什么可以直接用字符串进行比较?
* 因为字符0123456789的ASCLL码也是递增的
* 这个函数比较巧妙 需要对字符串有较为深刻的理解
*/
if(arr[j]+arr[j-1]>arr[j-1]+arr[j]){
string temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
for(int i=0;i<n;i++)
printf("%s", &arr[i][0]);
printf("\n");
return 0;
}