百度之星的一道題的解法

2021-04-18 10:15:20 字數 754 閱讀 7419

前段時間在csdn上溜達的時候發現有人發帖問一道演算法題的解法,看到之後感覺很有意思。題目如下

題目描述:乙個正整數有可能可以被表示為 n(n>=2) 個連續正整數之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。

看到這道題後很容易想到第一中解法,就是2層迴圈的解法。不過感覺該演算法的效率太低,我看到這個題目就立即想起了求和公式,我知道肯定有效率高的解法,剛好也沒事就想著做做看。經過了一段時間的推導,我終於把程式完成了。程式**如下,使用c++寫得。

int main(void) {

int n; 

cout<<"please input a num: n="; 

cin>>n; 

if(n%2) 

cout2*n)){

int temp=i-(i+2*n/i-1)/2;   

for(int j=0;j<2*n/i;++j)     

cout若乙個數k滿足題目的要求,比如可以分解成k=m+(m+1)+....+n,那麼按照求和公式可以得到等式:

(m+n)*(n-m+1)/2=k   ------>  2*k=(m+n)*(n-m+1);   ----->   2*k一定可以分解成2個整數相乘,即可以被2個整數整除。設m+n=i    ------>    n-m+1=2*k/i    ------>  m=i-i+(2*k/i-1)/2   根據題目要求 m>0 就可以得出約束條件,這樣再看程式就一目了然。

百度之星的一道題的解法

前段時間在csdn上溜達的時候發現有人發帖問一道演算法題的解法,看到之後感覺很有意思。題目如下 題目描述 乙個正整數有可能可以被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序...

百度之星的一道題

乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述的全部正整數...

一道百度架構題

無論筆試還是面試總會被問到一些架構題,關鍵還無法理解面試官究竟在問什麼。開始積累這些題吧,放到下面 關於海量資料儲存與訪問,涉及到分庫,分表,可以參考此文 1 有乙個監控系統,有大量的資料記錄包括 url,使用者訪問ip,時間 要對這個監控系統進行維護,並提供查詢。設計乙個能儲存和維護1000億條記...