【pat乙级】组个最小数

(pat乙级1023)
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:
输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。

输出格式:
在一行中输出能够组成的最小的数。

输入样例:
2 2 0 0 0 3 0 0 1 0

输出样例:
10015558

代码:

#include<iostream>
using namespace std;
int main(){
   int num[10];
   for(int i=0;i<10;i++){
      cin>>num[i];
   }
   int unzero_position=0;
   for(int i=0;i<10;i++){
      if(num[i]!=0&&i!=0){
      	cout<<i;
        for(int j=0;j<num[0];j++)cout<<"0";
        unzero_position=i;
        break; 
     }
   }
   int sum=0; 
   for(int i=0;i<10;i++){ //数字0~9按照从小到大打印
        if(num[i]!=0&&i!=0){ //个数为0和已经全部打印的0除外
                if(i==unzero_position)sum=num[i]-1; //已经打印了一位,剩下的也要打印
                else sum=num[i];
                for(int j=0;j<sum;j++)cout<<i; //没有打印过,全部打印
        }
   }
   return 0;
}

按照0~9数字的个数依次打印,特例是注意第一个不为0的且个数非零的数字是右边第一位数接下来是所有0,然后是其他没有打印完的数字。

发布了64 篇原创文章 · 获赞 49 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览