【暴力枚举】2021蓝桥杯-卡片

文章描述了一个编程挑战,小蓝有20210张0到9的卡片,需要计算能用这些卡片拼出多少个正整数。由于每个数位的1最多有2021个,所以问题转化为找出第一个需要超过2021个1的数字。通过枚举和数位拆分的方法,发现答案是3181。
摘要由CSDN通过智能技术生成

2021蓝桥杯-卡片

题目描述:

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有很多数字卡片,每张卡片上都是数字0到9。小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从1拼到多少。 例如,当小蓝有 30张卡片,其中0到9各3张,则小蓝可以拼出1到 10,但是拼11时卡片1已经只有一张了,不够拼出11。

现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?

提示:建议使用计算机编程解决问题。

运行限制:

最大运行时间:1s

最大运行内存: 128M

思路:1会首先被用完(1 10 11 需要4个),因此,只需要枚举出1出现的次数即可

关键方法:枚举每一个数,进行数位拆分,计数
#include <stdio.h>
int main()
{
	int cnt=0;
	//枚举每一个数,进行拆分,计数
	for(int i=1; ;i++){
		int n=i;//将i赋值给n,避免影响
		while(n!=0){//数位拆分
			int k=n%10;
			n=n/10;
			if(k==1){//如果是1,则计数
				cnt++;
				if(cnt==2021){//当等于2021,输出i
					printf("%d",i);
				}
			}
		}
	}
	return 0;
}

最终答案:3181

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值