2021年蓝桥杯省赛b组-----卡片

题目:小蓝有很多数字卡片,每张卡片上都是数字 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 
#include 

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;
}

你可能感兴趣的:(蓝桥杯,蓝桥杯)