给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
#include<stdio.h>
int main() {
int arr[10] = { 0 },a=0;
for (int i = 0;i < 10;i++) {
scanf("%d", &arr[i]);
}
for (int j = 0;j < 10;j++) {
if (arr[j] != 0) {//找出0~9中不为0的数
if ((arr[0] != 0)) {//判断0的个数是否为0
for (int i = 1;i < 10;i++) {//找出0之后第一个个数不为0的数字放在首位上
if (arr[i] != 0&&a==0) {
printf("%d", i);
arr[i] -= 1;//将该数字的个数减一
a = 1;break;//a为标识符,如果a=0,说明数字为0的个数不为0,将0后第一个个数不为0的数字放在首位上后,该循环就结束了,往后也不用再执行,因此把a置为1.
}
}
for (int k = 0;k < arr[j];k++) {//首位定下来后,就按照从0到9的各个数字个数依次排在后边
printf("%d", j);
}
}
else {
for (int k = 0;k < arr[j];k++) {//如果0的个数为0,直接按照从1到9数字进行排列
printf("%d", j);
}
}
}
}
return 0;
}
编译器
C (gcc)
内存
364 / 65536 KB
用时
2 / 200 ms
状态
答案正确
分数
20 / 20
评测时间
2024/04/06 17:23:59
评测详情
测试点 | 提示 | 内存(KB) | 用时(ms) | 结果 | 得分 | |
0 | sample等价,非0最小数出现在0的两端 | 176 | 2 | 答案正确 | 12 / 12 | |
1 | 不出现0,只要数字按照顺序写出来就行 | 364 | 1 | 答案正确 | 2 / 2 | |
2 | 长度最长,达到边界50,只出现0和另外的一个非0数字 | 352 | 1 | 答案正确 | 2 / 2 | |
3 | 所有数字平均出现 | 184 | 1 | 答案正确 | 2 / 2 | |
4 | 有0,最小数字只出现1次,次小数字在后 | 364 | 1 | 答案正确 | 2 / 2 |