问题标题: 酷町堂:3811 最小的数字

0
0
已解决
曹砚青
曹砚青
中级光能
中级光能

3811   最小的数字

题目描述 Description

给出若干0~9(包含0和9)之间的数字,怎样排序可以使它们组成的数字最小(首位不能是0)?

输入描述 Input Description

输入共有两行,第一行输入正整数n,表示共n个数字;
第二行输入n个0~9之间的整数,用空格隔开。

输出描述 Output Description

输出为一行,输出组成的最小数字。

样例输入 Sample Input

9 1 0 5 1 4 5 0 5 1

样例输出 Sample Output

100114555

数据范围及提示 Data Size & Hint

0<n<=50。

 

 

怎么实现使它们组成的数字最小(首位不能是0)

 

怎么将0跟除0以外最小的数交换???


0
已采纳
李显晨
李显晨
中级启示者
中级启示者

为什么要交换++;

定义不用说,以下是输入:

for(int i=1;i<=n;i++){
        cin>>a[i];
        b[a[i]]++;//桶计数
    }

以下是输出首位:

for(int i=1;i<=9;i++){//选最小的首位(不能是0)
        if(b[i]!=0){
            cout<<i;
            b[i]--;//防止多出一个数
            break;
        }
    }

以下是输出后面的部分:

for(int i=0;i<=9;i++){
        for(int j=1;j<=b[i];j++){//不用去重
            cout<<i;
        }
    }

 

0
0
蒋文瀚
蒋文瀚
新手光能
新手光能

为什么交换?

首先

桶排

然后

记录比0大的数的下标

继续

输出第一个比0大的数,桶--

最后

按照桶的顺序输出

0
周zhouhaoran
周zhouhaoran
初级光能
初级光能

   记录比0大的数的下标    按照桶的顺序输出

我要回答