網易一道筆試題

2021-09-30 08:26:14 字數 1685 閱讀 5428

網易一道筆試題!  /*

輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列

例如:27

2~78~10

13~14

或:100000000

1413~14212

30438~33562

37783~40342

159688~160312

195057~195568

799938~800062

3999988~4000012

19999998~20000002 */

沒有仔細看下面這些**,先把它們收集起來在慢慢看,一共(5)種方法!

(1).

//折半查詢非遞迴版本

#include

using namespace std;

void print(int a, int b)

}high++;

sum+=high;

if (sum==s) }}

int main()

(2).

#include

#include

void out(int);

void prt(int, int);

int main( )

void out(int n)}}

void prt(int x, int y)

(3).

1 #include

2 #include

34 void out(int);

5 void prt(int, int);

67 int main( )

8 13

14 void out(int n)

15 25     }

26 }

27 void prt(int x, int y)

28

(4).

#include

int main()

return 0;}

/* 思路是這樣的:對於數s,若能表示成以a開頭的連續n個整數之和,由等差數列求和公式,不難得出

s = (2a + n - 1) * n

對該式變形,得

a = (2s - n * n + n) / 2n

因此,s能表示成n個連續正整數之和的充要條件是:

上式右端的分母大於0,且能被分子整除,且除得的整數a要大於0。

根據該條件對n進行遍歷,從n = 2開始,直到2s - n * n + n小於零結束,對期間的整數檢驗是否滿足

上述條件。

由於2s是定值,所以2s - n * n + n減小速度為n^2級,是比較快速的,故演算法的時間複雜度為o(sqrt(s))

----------------------更正

誤:s = (2a + n - 1) * n

正:2s = (2a + n - 1) * n*/

(5).

#include

int main()

for(int i = intnum - 1 ; i > 0 ; i--)

//printf("/n");

printf("%d ~ %d/n",j,temp);

}else if(temptotal > intnum)}}

return 0;}

我發現如果長期和他們在一起交流的話,肯定會很快變聰明的!

一道筆試題

看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...

一道筆試題

上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...

一道筆試題

題目是這樣的 判斷乙個小於1000的正整數是否為素數。素數的定義就不說了,以下直接分析解法,畢竟是在寫與專業相關的東西,是給本專業的人看得,所以看的人應該有點基礎吧?求素數的問題是乙個數學上的難題,這是常識,但是本題目限制了最大範圍是在1000以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...