蓝桥杯第六届省赛之加法变乘法

蓝桥杯第六届省赛之加法变乘法

加法变乘法

我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

这个题的关键是要想到一个方法(等式关系)将题目给的两个等式或条件串起来,而不是盲目的没有方向的暴力枚举。
首先我们分析题目不难得出一个等式关系,设两个数字分别为n和m,
1225-n-n-1-m-m-1=2015-n*(n+1)-m*(m+1)
代码实现:

#include<iostream>
using namespace std;
int main()
{
    
    
	int sum;
	for(int i=1;i<=46;i++)
	{
    
    	
		for(int j=i+2;j<=48;j++)
		{
    
    			
			sum =1225 - (2*i+1+2*j+1);
			if((sum+j*(j+1)+i*(i+1))==2015)
				cout<<i<<endl;		
		}
	}			
	return 0;
}
/*using namespace std;
int main()
{
	int sum1,sum2;
	for(int i=1;i<=46;i++)
	{		
		for(int j=i+2;j<=48;j++)
		{
			sum1 = 1225-i-(i+1)-j-(j+1);
		    sum2 = 2015-(j*(j+1)+i*(i+1));
			if(sum1 == sum2)
				cout<<i<<endl;
		}
	

	}			
	return 0;
}*/

答案是:10和16

最后分享一下我在做算法练习和OJ刷题时常常提醒自己的一句话:做算法题的练习过程总是比结果重要,要一步一步的在自己的想法上去进行优化,去体味思考的过程,思考的方式和方法永远处于学习过程中的绝巅。

猜你喜欢

转载自blog.csdn.net/weixin_46610759/article/details/107570469