【问题描述】
小蓝有很多数字卡片,每张卡片上都是数字0 到9。
小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1 拼到多少。
例如,当小蓝有30 张卡片,其中0 到9 各3 张,则小蓝可以拼出1 到10,但是拼11 时卡片1 已经只有一张了,不够拼出11。
现在小蓝手里有0 到9 的卡片各2021 张,共20210 张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] numbers=new int[10];
for(int i=0;i<numbers.length;i++) {
numbers[i]=2021;
}
boolean flag=true;
int number=0;
while(flag) {
//得到number里的每一位数字
char[] cha=String.valueOf(number).toCharArray();
for(int i=0;i<cha.length;i++) {
if(numbers[cha[i]-'0']>0) {//
numbers[cha[i]-'0']--;
}else {
flag=false;
break;
}
}
if(flag) {
number++;
}
}
System.out.println(number-1);
}
cha[i] - '0' 是一个常见的字符操作,通常用于将字符表示的数字转换为相应的整数值。
在ASCII字符集中,数字字符 '0' 到 '9' 的ASCII码值是连续的,依次为 48 到 57。因此,当执行 cha[i] - '0' 时,它会将字符 '0' 的ASCII码值(48)从 cha[i] 对应字符的ASCII码值中减去,这样就得到了相应数字字符代表的整数值。
举个例子,假设 cha[i] 是字符 '5',执行 cha[i] - '0' 就相当于 53 - 48,结果是整数 5,即 '5' 的数值表示。
这种方法常用于将字符数组表示的数字转换为相应的整数值,例如将 "123" 这样的字符数组转换为整数 123。