題目描述
給定一組數(shù)字段骄恶,從它們中恢復(fù)最小的數(shù)字瞻佛。 例如琉苇,給定{32,321,3214,0229,87}嘲玫,我們可以恢復(fù)許多數(shù)字,例如32-321-3214-0229-87或0229-32-87-321-3214并扇,關(guān)于不同的組合順序 這些段去团,最小的數(shù)字是0229-321-3214-32-87。
輸入
數(shù)字段個(gè)數(shù)N 之后是N個(gè)數(shù)字段
輸出
輸出最小得數(shù)字段組合拜马,并將去除開頭得零
解題思路
本題得實(shí)際意思就是獲得一組數(shù)字得最小值得組合渗勘°迦蓿考慮用string類型存儲(chǔ)數(shù)字段俩莽。
使用sort排序,其中cmp()返回得應(yīng)該為s1+s2<s2+s1;必須保證兩個(gè)數(shù)字段組合起來得到得數(shù)字是最小得
代碼
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int cmp1(string s1, string s2) {
return s1+s2<s2+s1;
}
int main() {
int n;
scanf("%d", &n);
vector<string> datas(n);
for (int i = 0; i < n; i++) {
cin >> datas[i];
}
sort(datas.begin(), datas.end(), cmp1);
bool flag = false;
for (int i = 0; i < n; i++) {
if (!flag) {
for (int j = 0; j < datas[i].size(); j++) {
if (datas[i][j] == '0' && !flag) {
continue;
}
else {
flag = true;
cout << datas[i][j];
}
}
}
else {
cout << datas[i];
}
}
if(!flag)cout<<0<<endl;
return 0;
}