PTA | 1023 组个最小数 分数 20

100 阅读1分钟

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;
}