题目描述:
小蓝有很多数字卡片,每张卡片上都是数字0 到9。
小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1 拼到多少。
例如,当小蓝有30 张卡片,其中0 到9 各3 张,则小蓝可以拼出1 到10,但是拼11 时卡片1 已经只有一张了,不够拼出11。
现在小蓝手里有0 到9 的卡片各2021 张,共20210 张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。
————————————————
献上代码
public class main2 {
static int N=2021;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] num = new int[10];//给每个数一个数组
int temp;//作为临时容器
int t;//拼成的数的每一位
int i;
boolean flag = false;//判断是否可以退出循环
for(i = 0;i<10;i++)
{
num[i]=2021;//每个数字有2021张
}
for(i=1;;i++)
{
temp=i;//如21 21%10=1 21/10=2 能记录每一个数字
while (temp!=0) {
t=temp%10;
num[t]--;//用一张后减一
if(num[t]<=0)//2021张都用完
{
flag=true;
break;//退出循环
}
temp/=10;
}
if(flag)
{
break;//退出循环
}
}
System.out.print(i);//退出循环时已经用完需要减一
}
}
主要思路在于把0--9 开辟一个一维数组,a[0]=2021 就相当于0有2021张。 分解每一个拼成的数字,用完一张就减一,全部用完就退出循环,输出i就是最后的结果