c语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。 现给定数字,请编写程序输出能够组成的最小的数。 输入格式: 输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。 输出格式: 在一行中输出能够组成的最小的数。
时间: 2024-02-15 21:03:43 浏览: 117
C语言实现一些经典算法,可以免费下载
这是一道经典的贪心算法问题,我们可以按照以下步骤来解决:
1. 找出所有数中最小的非零数,将其输出为首位;
2. 输出所有的0;
3. 从1到9,依次输出所有数中该数字的个数。
以下是C语言的代码实现:
```c
#include <stdio.h>
int main()
{
int nums[10]; // 存储数字0-9的个数
int i, j, min = 1; // min表示最小的非零数字
// 输入数字个数,找到最小的非零数字
for (i = 0; i < 10; i++) {
scanf("%d", &nums[i]);
if (i != 0 && nums[i] > 0 && nums[i] < nums[min])
min = i;
}
// 输出最小的非零数字
printf("%d", min);
// 输出所有的0
for (i = 0; i < nums[0]; i++)
printf("0");
// 输出其他数字
for (i = 1; i < 10; i++) {
if (i == min) continue;
for (j = 0; j < nums[i]; j++)
printf("%d", i);
}
printf("\n");
return 0;
}
```
输入样例:
```
0 2 1 0 0 0 0 0 0 0
```
输出样例:
```
100
```
阅读全文