给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
结题思路:定义一个数组,输出对应的值,然后判断0的个数是否为0,如果不为0,那么输出第一个不为0的数,等于0,就直接输出接下来的数即可
测试点2 3 4
就是:判断0的个数是否为0,如果不为0,那么输出第一个不为0的数,即此文章第一个if语句处
# includeusing namespace std; int main() { int a[10] = { 0 };int i = 0,sum=0; for (int i = 0;i < 10;i++) { cin >> a[i]; sum += a[i];//sum用来当所有的数字均为0的情况,输出0 } if (a[0] != 0)//用于0的个数不为0的情况 测试点2 4 { for (int n = 1;;n++)//输出第一个比较小的数 { if (a[n] != 0) { cout << n; a[n] -= 1; break;//有且仅输出一次 测试点3 } } } while (i < 10)//输出每一个数 { for (int m = 0;m < a[i];m++)//m为记录对应的个数 { cout << i; } i++; } if (i == 10)cout << endl;if (sum == 0)cout << 0 << endl; return 0; }



