給定數字 0-9 各若干個。你能夠以任意順序排列這些數字,但必須所有使用。目標是使得最後獲得的數儘量小(注意 0 不能作首位)。例如:給定兩個 0,兩個 1,三個 5,一個 8,咱們獲得的最小的數就是 10015558。ios
現給定數字,請編寫程序輸出可以組成的最小的數。數組
輸入在一行中給出 10 個非負整數,順序表示咱們擁有數字 0、數字 一、……數字 9 的個數。整數間用一個空格分隔。10 個數字的總個數不超過 50,且至少擁有 1 個非 0 的數字。ide
在一行中輸出可以組成的最小的數。flex
2 2 0 0 0 3 0 0 1 0
10015558
用一個數組保存10個非負整數的個數,根據各個非負整數出現的次數,把他們轉化成字符,push進一個字符串的尾部spa
假設有字符串s,給出2個0,就將2個0轉化成字符,添加到s的尾部, s.push_back(0+48) 執行2次code
字符 c = '1', 將char轉成int:int a = c - 48blog
整型 a = 1,將int轉成char: char c = a + 48ci
最後遍歷字符串,若是第一位是0,就將第一位非0字符與第一位進行交換字符串
用一個數組保存10個非負整數的個數get
從1-9中選一個最小的數輸出1次,其個數-1
而後從0開始依次輸出數組
思路1
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 using namespace std; 5 6 int main() 7 { 8 const int N = 10; 9 int arr[N]; 10 string s; 11 for (int i = 0; i < N; ++i) 12 { 13 cin >> arr[i]; 14 for (int j = 0; j < arr[i]; ++j) 15 { 16 s.push_back((i + 48)); 17 } 18 19 } 20 sort(s.begin(), s.end()); 21 if (s.at(0) == '0') 22 { 23 for (int i = 1; i < s.size(); ++i) 24 { 25 if (s[i] != '0') 26 { 27 char temp = s[i]; 28 s[i] = s[0]; 29 s[0] = temp; 30 break; 31 } 32 } 33 } 34 cout << s; 35 return 0; 36 }
思路2
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 const int N = 10; 7 int arr[10]; 8 for (int i = 0; i < N; ++i) 9 { 10 cin >> arr[i]; 11 } 12 13 for (int i = 1; i < N; ++i) 14 { 15 if (arr[i] != 0) 16 { 17 cout << i; 18 arr[i]--; 19 break; 20 } 21 } 22 23 for (int i = 0; i < N; ++i) 24 { 25 for (int j = 0; j < arr[i]; ++j) 26 { 27 cout << i; 28 } 29 } 30 return 0; 31 }