Karl 有 n 个数字(值为 0∼9),现在 Karl 想用上全部数字摆成一个数 x(不含前导零)。请你帮助 Karl 计算—— x 的最小值是多少。
你需要依次处理 t 个这样的问题。
第一行一个正整数 t,表示问题的数量。
接下来 t 块:
第一行一个正整数 n 表示数字个数。
第二行 n 个数字 a1,...,an 表示对应的数字。
t 行,每行一个数字表示结果。
2
3
1 2 3
4
1 0 3 4
123
1034
2
3
1 1 3
4
4 5 6 5
113
4556
【数据范围】
对于所有数据,1≤t≤102,1≤n≤103,0≤ai≤9。
| 测试点编号 | n | 特殊约束 |
|---|---|---|
| 1∼6 | ≤10 | 每种数字只出现一次 |
| 7∼12 | ≤10 | 无 |
| 13∼20 | ≤103 | 无 |
【样例 1 解释】
第一组数据中,能摆成的数有 123,132,213,231,312,321, 其中 123 是这些数中最小的。
第二组数据中,由于不能含有前导零,能摆成的数有 1034,1043,1304,1340,1403,1430,...,4310,其中 1034 是这些数中最小的。
【样例 2 解释】
第一组数据中,能摆成的数有 113,131,311,其中 113 是这些数中最小的。
第二组数据中,能摆成的数有 4556,4565,4655,5456,...,6554,其中 4556 是这些数中最小的。
code如下
#include <bits/stdc++.h>
using namespace std;
int T;
int n;
int a[1010];
int main()
{
cin >> T;
while(T--){
int t = 0,z = 0;
cin >> n;
for(int i = 1;i <= n;i++){
int x;
cin >> x;
if(x == 0){
z++;
}else{
t++;
a[t] = x;
}
}
sort(a + 1,a + t + 1);
if(z == 0){
for(int i = 1;i <= t;i++){
cout << a[i];
}
cout << endl;
}else{
cout << a[1];
for(int i = 1;i <= z;i++){
cout << 0;
}
for(int i = 2;i <= t;i++){
cout << a[i];
}
cout << endl;
}
}
return 0;
}
80分也不知道错了哪里