牛客网_PAT乙级_1013组个最小数 (20)
題目描述
給定數(shù)字0-9各若干個。你可以以任意順序排列這些數(shù)字,但必須全部使用。目標(biāo)是使得最后得到的數(shù)盡可能小(注意0不能做首位)。例如:
給定兩個0,兩個1,三個5,一個8,我們得到的最小的數(shù)就是10015558。
現(xiàn)給定數(shù)字,請編寫程序輸出能夠組成的最小的數(shù)。
輸入描述:
每個輸入包含1個測試用例。每個測試用例在一行中給出10個非負(fù)整數(shù),順序表示我們擁有數(shù)字0、數(shù)字1、……數(shù)字9的個數(shù)。整數(shù)間用一個空格分隔。10個數(shù)字的總個數(shù)不超過50,且至少擁有1個非0的數(shù)字。
輸出描述:
在一行中輸出能夠組成的最小的數(shù)。
輸入例子:
2 2 0 0 0 3 0 0 1 0
輸出例子:
10015558
代碼
一開始把題意理解錯了,以為只是對輸入的數(shù)進(jìn)行排序,后來才發(fā)現(xiàn),輸入的10個數(shù)是每個數(shù)字(從1到10)出現(xiàn)的次數(shù)。
以下代碼均能運(yùn)行,至于運(yùn)行結(jié)果:
代碼1是正確的,代碼2是錯誤的
代碼1
思路:
先存下來每個數(shù)出現(xiàn)的次數(shù)
打印的時候,因為0不能再開頭,所以當(dāng)數(shù)字0出現(xiàn)的次數(shù)不為0時,找到后面的不是0的數(shù)字,提前打印出來,同時把這個被提前打印的數(shù)字的出現(xiàn)次數(shù)減一
代碼2(雖然結(jié)果不對,將0與第一個非0數(shù)交換的思路,仍可參考)
//以下代碼能正確運(yùn)行,但是,對題意理解有誤! #include<iostream> #include<algorithm> #include<vector> class Num { public:int num;Num(int num);//構(gòu)造器 }; Num::Num(int num) {this->num = num; }int myCompare(Num num1, Num num2) {return (num1.num < num2.num); } int main() {//輸入:數(shù)字用空格隔開,用ctrl z結(jié)尾int number;int count = 0;std::vector <Num> num;while (std::cin >> number){num.push_back(Num(number));count++;}//排序std::sort(num.begin(), num.end(), myCompare);//排序后,如果第一個數(shù)字是0,將0與第一個不是0的數(shù)字交換int switcher;if (num[0].num == 0){for (switcher = 0; switcher < count; switcher++){if (num[switcher].num != 0)//交換{num[0].num = num[switcher].num;num[switcher].num = 0;break;}}}//輸出int printCounter;for (printCounter = 0; printCounter < count; printCounter++){std::cout << num[printCounter].num;}system("pause"); }總結(jié)
以上是生活随笔為你收集整理的牛客网_PAT乙级_1013组个最小数 (20)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用markdown编辑器?官方文档
- 下一篇: 牛客网_PAT乙级1014_科学计数法