牛客网_PAT乙级_1013组个最小数 (20)
生活随笔
收集整理的這篇文章主要介紹了
牛客网_PAT乙级_1013组个最小数 (20)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定數字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
代碼
一開始把題意理解錯了,以為只是對輸入的數進行排序,后來才發現,輸入的10個數是每個數字(從1到10)出現的次數。
以下代碼均能運行,至于運行結果:
代碼1是正確的,代碼2是錯誤的
代碼1
思路:
先存下來每個數出現的次數
打印的時候,因為0不能再開頭,所以當數字0出現的次數不為0時,找到后面的不是0的數字,提前打印出來,同時把這個被提前打印的數字的出現次數減一
代碼2(雖然結果不對,將0與第一個非0數交換的思路,仍可參考)
//以下代碼能正確運行,但是,對題意理解有誤! #include<iostream> #include<algorithm> #include<vector> class Num { public:int num;Num(int num);//構造器 }; Num::Num(int num) {this->num = num; }int myCompare(Num num1, Num num2) {return (num1.num < num2.num); } int main() {//輸入:數字用空格隔開,用ctrl z結尾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);//排序后,如果第一個數字是0,將0與第一個不是0的數字交換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"); }總結
以上是生活随笔為你收集整理的牛客网_PAT乙级_1013组个最小数 (20)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用markdown编辑器?官方文档
- 下一篇: 牛客网_PAT乙级1014_科学计数法