網易筆試題:輸入一個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。
阿新 • • 發佈:2019-01-07
解題思路:
**找到數學規律。n以i為開頭的j個整數的和為i*j+j*(j-1)/2;判斷輸入的整數是否和計算結果相同。
如果相同則迴圈輸出以i為開頭的j個整數。
這個題目給我最大的啟示就是要學會用數學的方法來解決問題,在此之前我一直希望通過一種遞迴或者迴圈
來建立一個包含所有能被連續整數和表示的整數集合,這我個人認為是一種計算機式的思維。
以後在解決問題的時候要嘗試數學抽象來解決問題。
*/
public static void print(int n){
int r = 0;
for(int i = 1; i< (n+1)/2; i++){
for(int j = 1; j< (n+1)/2; j++){
r = i*j + j*(j-1)/2;
if(r == n){
System.out.println("存在從 " +i +" 開始的連續 "+j+"個數字,使得它們的和為 "+ n);
return;
}
}//inner for
}// outer for
System.out.println("不存在連續的數字使得它們的和為 "+ n);
}
int r = 0;
for(int i = 1; i< (n+1)/2; i++){
for(int j = 1; j< (n+1)/2; j++){
r = i*j + j*(j-1)/2;
if(r == n){
System.out.println("存在從 " +i +" 開始的連續 "+j+"個數字,使得它們的和為 "+ n);
return;
}
}//inner for
}// outer for
System.out.println("不存在連續的數字使得它們的和為 "+ n);
}