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

第十二届蓝桥杯省赛CC++省赛B组—卡片,第1张


题解:

仔细思考会发现:
(1)在所有的牌中一定是1先用完,所有我们减少思考的问题规模,直接考虑1使用完的情况。



(2)但是当1使用完并不代表不能继续往下拼,在1刚用完的地方到下一个使用1的地方这之间的数是可以继续拼的。


例如:当i=300时,拼到991,1就用完了,但是992、993、994、995、996、997、998、999这些是不需要用1拼的。


所以 i=count(结合下面代码)时循环并不结束,i


答案:

3181

代码:

#include
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++;
	}
}    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存