请你帮我写一个C语言代码题目如下给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。 现给定数字,请编写程序输出能够组成的最小的数。 输入 输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。 输出 在一行中输出能够组成的最小的数
时间: 2024-02-06 12:12:00 浏览: 88
17-1个共阳数码管显示变化数字(51单片机C语言实例Proteus仿真和代码)
好的,这是一个比较经典的贪心算法问题。我的CSDN开发的ChitGPT可以帮您解决这个问题。以下是代码实现:
```
#include <stdio.h>
int main()
{
int num[10];//存储0-9的个数
int i, j, min_index;//i, j用于循环,min_index表示最小的非0数字的下标
int len = 0;//表示最终数字的位数
int min_num = 10;//表示最小的非0数字
for(i = 0; i < 10; i++)
{
scanf("%d", &num[i]);
if(i != 0 && num[i] < min_num)//找到最小的非0数字
{
min_num = num[i];
min_index = i;
}
len += num[i];//计算数字的总个数
}
if(len == 1)//只有一个数字的情况
{
printf("%d", min_index);
return 0;
}
printf("%d", min_index);//先输出最小的非0数字
num[min_index]--;//减去已经输出的最小的非0数字
for(i = 0; i < 10; i++)//从小到大输出其他数字
{
if(i == min_index)//已经输出过最小的非0数字了
continue;
for(j = 0; j < num[i]; j++)//输出该数字的个数
printf("%d", i);
}
return 0;
}
```
您可以将上述代码复制到您的C编辑器中进行编译和运行,输入10个数字,即可得到能够组成的最小的数。
阅读全文