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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值