题目:卡片
小蓝有很多数字卡片,每张卡片上都是数字0到9。
小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个就保存起来,卡片就不能用来拼其他数了。
小蓝想知道自己能从1拼到多少。
例如,当小蓝有30张卡片,其中0到9各3张,则小蓝可以拼出1到10,但是拼11时卡片1已经只有一张了,不够拼出11.
现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。
解题思路:
暴力枚举
从1枚举到n。拿出卡牌的每一位进行判断,判断卡牌数量是否为0 是则输出结果 否则用一张卡牌扔一张
易错点:
因为枚举是拼的卡牌+1进来判断的所以当卡牌为0时需减去当前判断的这个卡牌
#include<stdio.h>
int main()
{
int arr[10];
int i, ret,n;
for (i = 0; i < 10; i++)//循环赋值2021到第0到9的数组
{
arr[i] = 2021;
}
for (i = 1;; i++)//从1开始枚举到n
{
ret = i;
while (ret != 0)
{
n= ret % 10;//拿出卡牌的每一位数进行判断
if (arr[n] <= 0)//判断卡牌数是否小于等于0结束程序输出结果
{
i -= 1;//因为是卡牌枚举先+1进来的所以要减去正在判断的这个数
printf("%d", i);
return 0;
}
else
{
arr[n]--;//用一张扔一张
ret /= 10;//继续求下一位
}
}
}
}
运行结果:3181