蓝桥杯:加法变乘法(C++)

1、问题描述
问题描述:

加法变乘法

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

比如:
1+2+3+…+10 * 11+12+…+27 * 28+29+…+49 = 2015
就是符合要求的答案。

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

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

2、我对这个问题的看法
  在我看来,这个题目用暴力枚举法就可以解决。
首先定一个起点a,再在第二个for循环里设置第二个点x,并把a+2赋给x(因为a和x要隔两个符号),然后开始遍历,直至满足条件a*(a+1)+x*(x+1)-a-(a+1)-x-(x+1)=2015-1225是输出当时的a,此时的a就是答案。

3、解法代码

#include<iostream>
using namespace std;

int a,x;              //定义两个左边的乘数,则两个右边的乘数分别为a+1和x+1; 

void changemulti()            
{
	for(a=1;a<34;a++)            //经过数学计算,a的最大值是33; 
	{
		for(x=a+2;x<34;x++)       //由于连个乘号不能相邻,所以x的初值是a+2; 
		{
			if((a*(a+1)+x*(x+1)-(a+a+1+x+x+1))==790)   //经过数学计算,得到等式成立的条件是(a*(a+1)+x*(x+1)-(a+a+1+x+x+1))=790; 
				{
					cout<<a<<" "<<x<<endl;                      //符合条件的就说明找到了,返回两个左边的乘数; 
				}
		}
	}
}

int main()
{
	changemulti();
	return 0;
}

4、运行结果
在这里插入图片描述

运行环境:DEV c++

至此,整个题目解答完毕!!!

结语:以上就是我对这个问题的理解、解法,可能存在着更好、更简洁的解法代码,希望大家提出来,我们一起讨论,交换看法,共同进步。若上述代码中存在问题,望大家指正,谢谢大家看到结尾。(∩^∩)

奋斗的2351

发布了12 篇原创文章 · 获赞 3 · 访问量 385

猜你喜欢

转载自blog.csdn.net/weixin_45620022/article/details/105124697