1. 程式人生 > >最小數排序

最小數排序

題目:

給定數字0~9若干個。你可以以任意順序排列這些數字,但必須全部使用。目標是使得最後得到的數儘可能小(注意0不能為首
位)。例如:給定兩個0,兩個1,三個5,一個8,我們得到的最小的數就是:10015558.
現給定數字,請編寫程式輸出能夠組成的最小的數。

輸入樣例1:

0 0 5 8 5 1 5 1

輸出樣例1:

10015558

輸入樣例2:

5 6 4 2 3 6 5 0 0 0 6

輸出樣例2:

20003455666

程式碼示例:

#include <iostream>

using namespace std;

int main()
{
    int baseNum[10] = { 0 };
    char theGet;
    int count = 0;

    while ((theGet = getchar()) != '\n')
    {
        baseNum[theGet-'0']++;
        count++;
    }

    int n;
    for (n = 1; n < 10; n++)            // 首位判斷
    {
        if (baseNum[n] == 0)
            continue;
        else
        {
            cout << n;
            baseNum[n]--;
            break;
        }
    }

    for (n = 0; n < 10; n++)            // 其他位判斷
    {
        if (baseNum[n] == 0)
            continue;
        else
        {
            cout << n;
            baseNum[n]--;
            if (baseNum[n] != 0)
                n--;
        }
    }

    return 0;
}