程式設計之美 只考加法的算術題

2021-07-14 16:30:58 字數 1040 閱讀 2166

問題描述:

給定乙個正整數 n,將n分解為幾個(2個以上)連續的自然數的和。是否所有的數都可以做到。

例如 10 = 1 + 2 + 3 + 4。

思路:

以最簡單的方式開始思考:

1) n為奇數,奇數可以分解為兩個連續的自然數的和。例如 9 = 4+5。

2) 當n為偶數,如果n可以被 3 整除, 假設a = n/3,那麼n還可以被分解為 a-1,a,a+1三個數

3) 當n為偶數,如果n是2的x次方,沒有任何奇數的因子,那麼n是無法分解的。

4) 找到n的奇數因子,

假設 n = a*b  a為奇數 b為偶數:

-   當a小於b的情況下,分解a得到 a, a+1,那麼 a-1, a+2的和也等於a,同樣的a-2, a+3

這樣只要找到b組這樣的數就可以算出n的。例如 68 = 4 * 17 其中 17 分解為  8 + 9

那麼再分解一組 7 + 10  ....  。 68 = 

5 + 6 + 7 + 8 + 9 + 10 + 11 + 12

-   當a大於b的情況下,可以看做n是由a個b構成,那麼以b為中心,向左右分別逐個加減一 a/2次

就可以得到連續的乙個數字序列串,其和為n。例如 40 = 6 + 7 + 

8 + 9 + 10。以8為中心,左右

分別加減2次。

**:

#include #include using namespace std;

void func(int n)

else if (n%3 == 0)

else if (n % 2 == 0)

else

while ((a > 0) && (i > 0))

break;}}

}if (vec.size() > 0)

}else

cout << endl << endl;

}void main()

cin >> i;

}

只考加法 程式設計之美2 21

我們知道 1 2 3 4 5 9 2 3 4 9 等式左邊都是兩個以上連續的自然數相加,那麼是不是所有的整數都可以寫成這種形式呢?寫乙個程式,對於乙個32位正整數,輸出它所有的連續自然數之和的算式。可以發現任意自然數序列其實是公差為1的等差數列,那麼數列前n項和公式有a1 n n n 1 2 sn,...

程式設計之美2 21 只考加法的面試題

問題1 寫乙個程式,對於乙個數,輸出他所有可能的連續自然數之和的算式。解 num a a 1 a 2 a 3 a k 2 a k 1 k a a k 1 2 ka k k 1 2 k是整數,a是整數,所以k k 1 2也是整數。include using namespace std void que...

程式設計之美2 21 只考加法的面試題

題目 我們知道 1 2 3 4 5 9 2 3 4 9 等式左邊都是兩個以上連續的自然數相加,那麼是不是所有的整數都可以寫成這種形式呢?問題1.寫乙個程式,對於乙個64位正整數,輸出它所有可能的連續自然數 兩個以上 之和的算式 問題2.有的數例如32就找不到這樣的表達,這樣的數字有什麼規律?問題3....