PTA | 程序设计类实验辅助教学平台 (pintia.cn)
解题思想
题目是按照第i个位置输入的第i个数的个数,所以第0个位置一定输入的是0的个数。又因为0不能作为首位,所以我们可以先从第1个数开始输出,先输出一次,然后再从第0个数开始输出,输出0,这个时候就该把第1个数剩下的次数接着输出完了:
#include <cstdio>
using namespace std;
int main()
{
int num_count[10];
for(int i = 0; i < 10; i++){
scanf("%d",&num_count[i]);
}
for(int i = 1; i < 10; i++){//先输出一个最小的个数为非零个的非零数字
if(num_count[i] != 0){
printf("%d",i);
num_count[i]--;//输出后个数减一
break;
}
}
for(int i = 0; i < 10; i++){//顺次从小到大按个数输出各数字
for(int j = 0; j < num_count[i]; j++){
printf("%d",i);
}
}
return 0;
}
下面这个代码也可以:
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
//0-9
for(int i=0;i<10;i++)
{
cin>>a[i];
}
for(int i=0;i<10;i++)
{
if(i&&a[i]) //如果不是第0个数,并且个数不为空
{
cout<<i;
a[i]--;
break; //先输出一次
}
}
for(int i=0;i<10;i++)
{
while(a[i]) //每个数的个数都输出完为止
{
cout<<i; a[i]--;
}
}
return 0;
}