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

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

仔细思考会发现:
(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++;
	}
}    

在这里插入图片描述


版权声明:本文为weixin_48798373原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。