藍橋杯 — 加法變乘法(把其中兩個不相鄰的加號變成乘號)
阿新 • • 發佈:2018-12-30
題目要求如下:
加法變乘法
我們都知道:1+2+3+ ... + 49 = 1225
現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
請你尋找另外一個可能的答案,
並把位置靠前的那個乘號左邊的數字提交(對於示例,就是提交10)。
注意:需要你提交的是一個整數,不要填寫任何多餘的內容。
思路:
1. 說思路其實也沒什麼思路,按照正常的解法一步一步的寫出程式來就OK了。
2. 將1+2+3+ ... + 49其中的兩個“+”變成“*”,用雙重迴圈來遍歷所有可能出現的結果。
3. 外層迴圈的變數i代表前一個“*”,內層迴圈中的j代表後一個“*”,依次遍歷。
4. 用變數tmp來儲存將程式中的前一個“+”改變成“*”過後的結果。程式碼為tmp = res = sum-(i+(i-1))+i*(i-1) ,讀者需要仔細理解這句程式碼。
5. 用變數res來儲存將程式中的後一個“+”改變成“*”過後的結果。程式碼為res = tmp-(j+(j-1))+j*(j-1) 。
6. 然後變數res判斷的值是否為2015。如果是,則輸出i和對於j的值。(題目中只要求求出前一個“*”所在的位置,即i的值)。
原始碼如下:
#include <stdio.h> int main() { int sum = 1225; int tmp=0; //臨時變數,在程式中儲存中間結果 int res=0; //用來儲存將“+”改變成“*”號後的結果 for(int i=2; i<=47; ++i) { tmp = res = sum-(i+(i-1))+i*(i-1); for(int j=i+2; j<=49; ++j) { res = tmp-(j+(j-1))+j*(j-1); if(res == 2015) { printf("(i= %d ,j= %d)\n", i-1,j-1); } } } }
執行結果如下:
注:本程式在devc++中通過編譯執行。