--------------------------------------------------------------------------------------------------------------------------------------------------------
时间限制:1秒 空间限制:32768K 代码长度限制 100 KB
--------------------------------------------------------------------------------------------------------------------------------------------------------
题目描述
给定数字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
--------------------------------------------------------------------------------------------------------------------------------------------------------
实现思路:
(1).判断数字中有没有0出现;
(2).如果没有0出现,只需要将每个位数出现的次数逐一打印出来即可;
(3).如果0出现,则先打印出现的最小位数一次,剩下的按照2规则,全部打印即可,注意,后续打印过程中,出现的最小位数打印次数需要减少一次。
--------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int[] numArr = new int [10];
for (int i = 0; i < numArr.length; i++) {
numArr[i] = scan.nextInt();
}
getMinNumByArray(numArr);
}
}
public static void getMinNumByArray(int[] digitNumArr){
int first = findNotZero(digitNumArr);
if(first != -1){
System.out.print(first);
}
for (int i = 0; i < digitNumArr.length; i++) {
int num = digitNumArr[i];
if(first == i){
num = num - 1;
}
for (int j = 0; j < num; j++) {
System.out.print(i);
}
}
}
public static int findNotZero(int[] digitNumArr){
if(digitNumArr[0] == 0){
return -1;
}
for (int i = 1; i < digitNumArr.length; i++) {
if(digitNumArr[i] > 0){
return i;
}
}
return -1;
}
}