網易一道筆試題! /*
輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列
例如: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以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...