1023 組個最小數 (20分)java
給定數字 0-9 各若干個。你能夠以任意順序排列這些數字,但必須所有使用。目標是使得最後獲得的數儘量小(注意 0 不能作首位)。例如:給定兩個 0,兩個 1,三個 5,一個 8,咱們獲得的最小的數就是 10015558。數組
現給定數字,請編寫程序輸出可以組成的最小的數。app
輸入在一行中給出 10 個非負整數,順序表示咱們擁有數字 0、數字 一、……數字 9 的個數。整數間用一個空格分隔。10 個數字的總個數不超過 50,且至少擁有 1 個非 0 的數字。測試
在一行中輸出可以組成的最小的數。ui
2 2 0 0 0 3 0 0 1 0
10015558
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; /** * 1023 組個最小數 (20分) * 給定數字 0-9 各若干個。你能夠以任意順序排列這些數字,但必須所有使用。目標是使得最後獲得的數儘量小(注意 0 不能作首位)。 * 例如:給定兩個 0,兩個 1,三個 5,一個 8,咱們獲得的最小的數就是 10015558。 * <p> * 現給定數字,請編寫程序輸出可以組成的最小的數。 * <p> * 輸入格式: * 輸入在一行中給出 10 個非負整數,順序表示咱們擁有數字 0、數字 一、……數字 9 的個數。整數間用一個空格分隔。10 個數字的總個數不超過 50,且至少擁有 1 個非 0 的數字。 * <p> * 輸出格式: * 在一行中輸出可以組成的最小的數。 * <p> * 輸入樣例: * 2 2 0 0 0 3 0 0 1 0 * 輸出樣例: * 10015558 */ public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); String[] s1 = s.split(" "); int min = 10; StringBuffer stringBuffer = new StringBuffer(); for (int i = 1; i < 10; i++) { if (s1[i] != "0") { //肯定首位 if (i < min) { min = i; } } } stringBuffer.append(min); s1[min] = (Integer.parseInt(s1[min]) - 1) + ""; if (s1[0] != "0") { int a = Integer.parseInt(s1[0]); for (int i = 0; i < a; i++) { stringBuffer.append(0); } } for (int i = 1; i < 10; i++) { int i1 = Integer.parseInt(s1[i]); if (i1 != 0) { for (int j = 0; j < i1; j++) { stringBuffer.append(i); } } } System.out.println(stringBuffer.toString()); } }
本來覺得是沒有添加判斷將計數判斷添加之後依舊是錯誤,在線懵逼code
package not.die.in.here; //滿分20 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));//buff提升讀取速度 String[] buf = bf.readLine().split(" ");//空格分隔數據,存入字符串數組 int[] nums = new int[10]; StringBuilder sb = new StringBuilder(""); for(int i = 0;i<10;i++) {//遍歷添加到數組中 nums[i] = Integer.parseInt(buf[i]); } for(int i=1;i<10;i++) {//第一次遍歷 if(nums[i]!=0) { nums[i]--;//個數減一 sb.append(i); break;//添加一次就退出循環 } } for(int i=0;i<10;i++) { for(int j = 0;j<nums[i];j++) { sb.append(i);//第二次遍歷添加 } } System.out.println(sb);//輸出結果 } }