題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560ios
給定數字 0-9 各若干個。你能夠以任意順序排列這些數字,但必須所有使用。目標是使得最後獲得的數儘量小(注意 0 不能作首位)。例如:給定兩個 0,兩個 1,三個 5,一個 8,咱們獲得的最小的數就是 10015558。數組
現給定數字,請編寫程序輸出可以組成的最小的數。spa
輸入在一行中給出 10 個非負整數,順序表示咱們擁有數字 0、數字 一、……數字 9 的個數。整數間用一個空格分隔。10 個數字的總個數不超過 50,且至少擁有 1 個非 0 的數字。code
在一行中輸出可以組成的最小的數。ci
2 2 0 0 0 3 0 0 1 0
10015558
輸入數據的值表示對應數字的個數,要組成最小的數字,則需保證較小的數字在高位便可。可是要處理0這個特殊數字——不能在首位。若是有數字0,則首位變爲除了0以外第一個數字個數不爲0的數字,取出一位放到首位,並將這個除了0以外第一個數字個數不爲0的數字的個數減去一個。剩下的遍歷輸出便可。輸出時注意輸出的數字,而不是數字的個數。即數組的下標,而非數組值,數組值表示這個數字有多少個。可貴的一遍AC、、、get
#include <iostream> using namespace std; // 找到輸出數字的第一個數字是哪一個, int findFirstNumber(short array[]); int main() { // 表示0-9的個數 short array[10]; int i = 0; while (i < 10) { cin >> array[i++]; } // 若是數字0的個數爲0 if (array[0] == 0) { for (int i = 1; i < 10; i++) { if (array[i] != 0) { for (int j = 0; j < array[i]; j++) { cout << i; } } } } else { int firstNumber = findFirstNumber(array); cout << firstNumber; array[firstNumber]--; for (int i = 0; i < 10; i++) { if (array[i] != 0) { for (int j = 0; j < array[i]; j++) { cout << i; } } } } cout << endl; return 0; } int findFirstNumber(short array[]) { // 題目已經保證至少存在一個非0的數字 for (int i = 1; i < 10; i++) { if (array[i] != 0) { return i; } } }
cout << array[i]
,應該是cout << i
。