试题 A :卡片
类型:结果填空,总分:5分
【问题描述】
小蓝有很多数字卡片,每张卡片上都是数字 0到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
【思路】
- 使用一个数组存每种数字卡片的数量
- 从1开始遍历每个整数,获取各位上的数字
- 如果对应的数字卡片数量已经为0,即此数字不能被表示,break
- 如果对应的数字卡片数量不为0,在对应的计数数组中减去一个数字卡片
【代码】
public class Main {
public static void main(String[] args) {
int[] hash = new int[10];
for (int i = 0; i < 10; i++) {
hash[i] = 2021;
}
int n = 1;
boolean flag = false;
while(true) {
int tmp = n;
while(tmp > 0) {
if(hash[tmp % 10] == 0) {
flag = true;
break;
} else {
hash[tmp % 10]--;
tmp /= 10;
}
}
if(flag) {
break;
}
n++;
}
System.out.println(n - 1);
}
}
【结果】
3181
【做题连接】
水平有限不保证对,欢迎各位大佬评论交流