標題:我們都知道: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
這兩種情況