PAT (Basic Level) Practice 1023 组个最小数(JAVA)
1.题目描述
2.思路及代码
思路:
注意组数的顺序。为了保证得到的数字最小,先用一个最小的非零数字,以保证第一位不为0。然后用完所有的0,最后从小到大依次用完其余数字。
为了方便,可以开个数组int nums[10]
,下标i对应的nums[i]
恰好表示数字i的个数。
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException{
//读入数据
Scanner sc = new Scanner(System.in);
int nums[] = new int[10], i, j;
for(i = 0; i < 10; i++) {
nums[i] = sc.nextInt();
}
//用StringBuilder存放结果
StringBuilder ret = new StringBuilder();
j = 1;
while(nums[j] == 0) //寻找最小非0数字
j++;
ret.append(j); //插入一个最小非0数字
nums[j]--; //这个数字用掉一个
while(nums[0] != 0) { //再插入所有0
ret.append(0);
nums[0]--;
}
for(i = j; i < 10; i++) { //最后从小到大依次插入剩余数字
while(nums[i] != 0) {
ret.append(i);
nums[i]--;
}
}
System.out.print(ret);
sc.close();
}
}