本题总分:5 分
【问题描述】
小蓝有很多数字卡片,每张卡片上都是数字0到9。
小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1拼到多少。
例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,但是拼11时卡片1已经只有一张了,不够拼出11。
现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【思路】
从1开始拼,判断每次拼的数字各位的数字还有没有卡片,没有就结束。
【Java代码】
public class Cards { public static void main(String[] args) { //创建并初始化卡片集数组 int[] cases = new int[10]; for (int i = 0; i < cases.length; i++) { cases[i] = 2021; } //设置变量,num表示当前正在拼的数,temp和flag均是一个临时变量 int num; int temp; boolean flag = false; //从1开始拼 for(num = 1;;num++) { //对正在拼的这个数,看其每一位是什么数字,如果卡片集数组中还有就-1,没有就跳出循环,结束 temp = num; while(temp != 0) { if (cases[temp % 10] == 0) { flag = true; break; } cases[temp % 10]--; temp /= 10; } //没有相应的卡片可以拼了,退出循环,结束 if (flag) { break; } } //输出可以拼的个数,记得num是当前正在拼的,它是拼不成功的,所以只能拼到前一个 System.out.println(--num); } }
【结果】
3181