题目:小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30 张卡片,其中 0 到 9 各 3张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?
思路:刚开始还在想不是 11 = 8 + 3 or 9 + 2
吗,怎么和 1
杠上了呢;
后面才发现使用单个数字作为数位来拼,换句话说,11
是用两个 1
拼出来的…
也就是说这一堆卡片消耗到哪个数字时不能拼出来,我们就输出这个数字的前一个数字!!!
其实最先消耗完的是1,所以只需要算出什么时候消耗完1即可。
#include <stdio.h>
#include <stdlib.h>
int check(int x)//计算拼x时消耗了多少个1
{
int sum=0;
while(x>0)
{
if(x%10==1)
sum++;
x=x/10;
}
return sum;
}
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int i,res=0;
for(i=1;;i++)
{
res+=check(i);//把所有消耗1的个数加一起
if(res>2021)//此处不能用res==2021,因为有可能截止到i res(消耗1的个数)小于2021,但截止到i+1时res大于2021
{
printf("%d",i-1);
break;
}
}
return 0;
}