程式設計之美 只考加法的面試題 尺取法

2021-09-09 05:17:02 字數 708 閱讀 4186

問題:對於乙個任意的自然數,問是否能將其拆分成2個或2個以上的連續自然數之和,寫出所有的等式。

解題思路:第一種解法是推導出數學公式,因為連續的自然數可以用等差數列sn求和公式,判斷可行性。公式推導以及證明過程:數學解法;

第二種解法是直接窮舉解法,不過對於較大的數字複雜度o(n^2)可能不夠解決,由於連續的自然數一定是遞增狀態,我們可以用尺取法,也就是雙指標法將複雜度降低到o(n)

雙指標解法:

#include using namespace std;

typedef long long ll;

void print_answer (ll l, ll r)

}//寫法1

void get_answer (ll goal)

if(tmp > goal)

j++;

}if(flag == 0)

return ;

}//寫法2

void get_answer2 (ll goal)

if(sum < goal)

if(sum == goal)

sum -= i++; //移位

}if(flag == 0)

return ;

}int main()

程式設計之美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 只考加法的面試題

問題描述 寫乙個程式,對於乙個64位正整數,輸出它所有可能的連續自然數 兩個以上 之和的算式。例如 3 1 2 9 5 4 9 2 3 4。剛開始看到這個題目,直接想到的方法就是蠻力解決 即對於每乙個輸入的整數,從1開始加,一直加到等於或者大於這個整數為止。如果等於這個整數,則找到了一種連續自然數相...