日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客网_PAT乙级_1013组个最小数 (20)

發(fā)布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网_PAT乙级_1013组个最小数 (20) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

給定數(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ù)減一

#include<iostream> class TenDigits { public:int digit[10] = { 0 };//分別存放每一個數(shù)字出現(xiàn)的次數(shù)void putIn(int whichDigit, int count); };void TenDigits::putIn(int whichDigit, int count)//第whichDigit個數(shù)字出現(xiàn)count次 {this->digit[whichDigit] = count; }int main() {TenDigits tenDigits;//輸入,在一行中給出10個非負(fù)整數(shù),用ctrl z結(jié)尾int whichDigit = 0;//數(shù)字幾int count; //這一個數(shù)字出現(xiàn)的次數(shù)while (std::cin >> count)//這里可以替換成10次for循環(huán){tenDigits.putIn(whichDigit, count);whichDigit++;}//如果第一個數(shù)字是0,將后面第一個不是0的數(shù)字提前打印出來int searcher;if (tenDigits.digit[0] != 0){for (searcher = 1; searcher < 10; searcher++)//從第一個不是0的數(shù)字開始尋找{if (tenDigits.digit[searcher] != 0)//找到第一個不是0的數(shù)字{std::cout << searcher;//提前打印這個數(shù)字tenDigits.digit[searcher]--;//這個數(shù)字的個數(shù)減1break;}}}//循環(huán)打印int printDigits;int printCount;for (printDigits = 0; printDigits < 10; printDigits++){if (tenDigits.digit[printDigits] != 0)//如果有,就循環(huán)打印{printCount = tenDigits.digit[printDigits];for (; printCount > 0; printCount--)//循環(huán)打印printCount次{std::cout << printDigits;}}}system("pause"); }

代碼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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。