PAT练习-组个最小数

来源:互联网 发布:python chm 2.7下载 编辑:程序博客网 时间:2024/03/29 06:52

题目描述

给定数字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

#include<iostream>#include<stack>using namespace std;int main()    {    int M[10];    int i=0;    int flag=1;    stack <int> mystack;     for(i=0;i<10;i++)        {        scanf("%d",&M[i]);       }    for(i=9;i>0;i--)//注意这步只让其进栈前九位数,0那位排除在外        {         for(int j=0;j<M[i];j++)             {             mystack.push(i);                        }    }    while(!mystack.empty())//判断栈内元素是否为空        {                  printf("%d",mystack.top());//元素置于栈顶部        mystack.pop();//移除栈顶元素        if(flag&&M[0])            {            for(i=0;i<M[0];i++)                {            printf("0");                         }            flag=0;        }    }    if(mystack.empty()&&M[0]&&flag)//如果只有 ‘0’数量的时候输出0        {        printf("0");    }    return 0;}