题目:
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,
就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
分析: 每个卡片代表一个字符串,要求小蓝可以从1拼到多少,其实就是求出现的数字次数,哪一个最先到达2021。
答案:3181
我的过程:
public class problem02 {
public static void main(String[] args) {
int zero=0;
int one=0;
int two=0;
int three=0;
int four=0;
int five=0;
int six=0;
int seven=0;
int eight=0;
int nine=0;
int num=1;
while(true){
int i=num;
while(i!=0){
int j =i%10;
if(j==0)zero++;
if(j==1)one++;
if(j==2)two++;
if(j==3)three++;
if(j==4)four++;
if(j==5)five++;
if(j==6)six++;
if(j==7)seven++;
if(j==8)eight++;
if(j==9)nine++;
i/=10;
}
if(zero==2021||one==2021||two==2021||
three==2021||four==2021||five==2021||
six==2021||seven==2021||eight==2021||nine==2021)break;
num++;
}
System.out.println(num);
}
}
我的过程是从0到9每个数字定义一个变量,然后用一个while循环,将num一直自增,每次自增都会判断每位的数字,并将每个数字出现的次数记录下来,当任意一个数字到达2021时,跳出循环,并输出num,输出的num就是能加到的最大值。