本题总分: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