问题描述:
小蓝有很多数字卡片,每张卡片上都是数字0到9。小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能中来拼其它数了。小蓝想知道自己能从1拼到多少。例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,但是拼11时卡片1已经只有一张了,不够拼出11。现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。
public class kapian {
public static void main(String[] args) {
int[] a = new int[10];//用于存放数字0-9卡片的张数
a[0] = 2021;//数字0的卡片张数为2021
for (int i = 1; i < 10; i++) {
a[i] = 2020;
}//数字1-9卡片张数为2020,因为从循环从数字10开始
int flag = 0;//标志作用
int sum,j;
for (int i = 10; i < 10000; i++) {//最大的数字绝对不大于10000
sum = i;
for(j=i;j>=10;j=(j-j%10)/10){//取出数字的各位数
a[j % 10]--;//各位数的卡片数量对应减少
}
a[j]--;//最高位数字卡片数量减少
for (int k = 0; k < a.length; k++) {//循环用于判断数字卡片是否用完
if (a[k] < 0) {//若是用完,标志位改变
flag = 1;
}
}
if (flag == 1) {//0-9任一个数字卡片用完,输出最后拼成的数字
System.out.println(sum - 1);
break;//输出数字,结束此循环
}
}
}
}