标题:我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+10*11
+12+…+27*28
+29+…+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
思路分析:
首先由题意可知,得将两处的加号换成乘号,第一组好分析;
第一组:可以用一个循环,来控制,用一个变量来求和;
第二组:与第一组的循环始终相隔两位才行,再用一个变量存第二组变号之后的数。
代码如下:
#include<iostream>
using namespace std;
int main(){int x=1225;//这个是1~49相加之后的数之和int sum1=0,sum2=0;//sum1为了存储,第一个加号换成乘号之后再相加之后数之和for(int i=1;i<47;i++){//为啥到47为止,是因为,i控制的第一组相邻要变号的两个数,一共要找4组,这是第一组,所以最多到46为止,也就是46、47之间变号,然后是第二组48,49之间变号,这是最极端的情况sum1 = x - (i + (i+1)) + (i * (i+1));//减去要变号的两数,在加上两数乘积for(int j=i+2 ;j<49;j++){//由于这是第二组,所以得在第一组的后面,i为第一组的第一个数,每一组俩数,所以第二组的第一个数应该为第一组的第一个数的后两个sum2 =sum1 - (j + (j+1)) + (j * (j+1));//计算第二组变号之后的数if(sum2==2015){//若为2015,则将第一组跟第二组的第一个数输出出来即可cout << i <<endl;cout << j <<endl;}}}return 0;
}
输出结果如下:
即,
10跟11、27跟28
16跟17、24跟25
这两种情况