第十二届蓝桥杯省赛C/C++省赛B组—卡片

该博客探讨了一种编程问题,即如何确定在给定数字序列中1出现的次数。通过分析代码,我们可以看到作者使用了一个无限循环来不断检查数字的每一位,若含有1则计数。当计数的1数量超过输入的1数量时,输出前一个数字并结束循环。提供的解决方案以C++实现,重点在于位操作和循环控制。
摘要由CSDN通过智能技术生成

在这里插入图片描述
题解:

仔细思考会发现:
(1)在所有的牌中一定是1先用完,所有我们减少思考的问题规模,直接考虑1使用完的情况。
(2)但是当1使用完并不代表不能继续往下拼,在1刚用完的地方到下一个使用1的地方这之间的数是可以继续拼的。例如:当i=300时,拼到991,1就用完了,但是992、993、994、995、996、997、998、999这些是不需要用1拼的。所以 i=count(结合下面代码)时循环并不结束,i<count才会结束。

答案:

3181

代码:

#include<iostream>
using namespace std;

int main()
{
	int i=0;// 1的个数 
	int count=0;// 统计用到 1 的个数 
	int j=1;
	cin>>i;//这里写输入入口只是为了方便测试数据 
	while(1)
	{//直接设置一个无限循环,等找到符合的值再break跳出 
		int x=j;
		while(x)
		{//利用循环对数字进行个位、十位、百位等的分解 
			if(x%10==1)
			{//有1就计数 
				count++;
			}
			x/=10;
		}
		if(i<count)
		{//如果这个数使用到的 1 的个数已经比所给出的 1 多,输出前一个数并终止循环 
			cout<<j-1<<endl;
			break;
		}
		j++;
	}
}    

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打工咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值