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

2021-09-30 10:57:27 字數 718 閱讀 4501

問題描述:寫乙個程式,對於乙個64位正整數,輸出它所有可能的連續自然數(兩個以上)之和的算式。

例如:3=1+2; 9=5+4; 9=2+3+4。

剛開始看到這個題目,直接想到的方法就是蠻力解決:即對於每乙個輸入的整數,從1開始加,一直加到等於或者大於這個整數為止。如果等於這個整數,則找到了一種連續自然數相加的模式;如果大於這個整數,則無法找到,繼續從2開始加,依次類推。例如對於5來說,首先從1開始加:1+2+3=6>5,這樣從1開始就無法找到,從而停止繼續相加;然後從2開始相加:2+3=5,成功找到。

思路是這樣的:

假設這個正整數n可以表示成2個以上的連續自然數之和,那麼可以設這個序列為a,a+1....a+i。

那麼n=a+(a+1)+...+(a+i)=(i+1)*a + (i+1)*i/2。如果我們可以確定i的範圍,那麼我們就可以遍歷i,對於所有的i的取值,得到對應的a的值,然後判斷a是否為整數,即可知是否符合要求。這裡i可以認為表示的是序列的長度,那麼最長的序列必然是n=1+2...+i。所以有i*(i+1)=2n。

解得i=(sqrt(8n+1)-1)/2,所以i的取值就是[1, (sqrt(8n+1)-1)/2]區間中。隨即,遍歷i的取值,然後判斷對應的a是否為整數即可。

好的,有了思路就可以開始編碼了,下面是**部分:

本文出自:

程式設計之美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....

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

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