老鼠繁殖問題 老鼠有死亡

2022-03-08 03:49:48 字數 2020 閱讀 7148

同學的同學問了這樣乙個問題:

有一對小老鼠,出生一周後長成一對大老鼠,兩周後這對老鼠生出第一對小老鼠,三周後上週出生的小老鼠變成大老鼠,而原來的大老鼠又生出了一對小老鼠之後便死了,四周後,第一對出生的小老鼠(此時已經是大老鼠)又生出了一對小老鼠,此時共有三對老鼠。程式設計,計算n週後有多少對老鼠?

首先,這個問題如果小鼠沒有死亡,就是乙個典型的斐波那契數列(事實上斐波那契數列最早就是描述兔子繁殖的)

加上死亡,就需要重新考慮一下了~

方法一:

自然是超級水的同時很管用的----找規律法。

週數  0-----1-----2-----3-----4-----5-----6-----7.............

鼠數  1-----1-----2-----2-----3-----4-----5-----7.............

很容易就發現,相鄰兩個的和是隔一周的數,比如:2周和3周的和是5周,4周和5周的和是7周。

所以遞迴之:

1 #include 2

3using

namespace

std;45

int mouse(intn)6

11else

if (1 ==n)

1215

else

if (2 ==n)

1619

else

2023}24

25int

main()

2633

34return0;

35 }

方法二:

遞迴太慢了,而且對於這個問題,顯然沒複雜到只能用遞迴。

第二個方法就是手動模擬整個繁殖過程,開個陣列存不同年齡段的老鼠。也就是改成用遞推做~

1 #include 2

3using

namespace

std;45

int num(int);6

7int

main()814

1516

return0;

17}1819

int num(int

n)20;22

intt1, t2;

2324

for (int i=0; ii)

2534

return (a[0]+a[1]+a[2

]);35 }

又有下文了,同學的同學的老師說要大數也能處理的。

補充乙個:

1 #include 2 #include 3

4const

int max = 100000;5

6using

namespace

std;78

void add(char *str1, char *str2, char *str3);

9void num(int, char *);

1011

intmain()

1221

2223

return0;

24}2526

void num(int n, char *s)

2747

char

temp1[max];

48char

temp2[max];

49char

te***[max];

50strcpy(temp1, a0);

51add(temp1, a1, temp2);

52add(temp2, a2, te***);

53strcpy(s, te***);54}

5556

void add(char *str1, char *str2, char *str3)

5773

while (i1 >= 0)74

79while (i2 >= 0)80

8586

if(carry)

8790 str3[j] = '\0'

;9192for (i=0, --j; ij)

9398 }

老鼠繁殖問題

問題 一對耗子每個月生一對小耗子,小耗子成長3個月,從第4個月開始也可以每個 月生一對小耗子。假如所有的耗子都不死的情況下,2年 24個月 後一共有多少只耗子?業務邏輯來看 將老鼠分為 old 出生超過3個月 first 出生乙個月 second 出生兩個月 third 出生3個月 如下 inclu...

老鼠毒藥問題

問題1 1000瓶水中有 1瓶下了毒,老鼠只要喝一點點就會在一周之內死掉,問至少需要多少只老鼠,才能在一周之內找出是哪一瓶水有毒?微軟筆試題 解析 假設有 n只老鼠,則瓶數的上限n 2 n 將瓶子的 10進製編號 0 n 1 改為n位的2進製碼,然後 從左到右 讓第1只老鼠喝所有 編號的2 進製碼中...

貓吃老鼠問題

今天在看雪看到這個 貓吃老鼠問題 的帖子,和當初學程式設計時的乙個叫做 約瑟夫環問題 類似。自己按照數學的方法分析了一下,得到乙個數學演算法。問題描述 現有n個老鼠圍成一圓圈,有乙隻貓從任意位置開始吃老鼠,每次都隔乙個老鼠吃,請給出最後乙個老鼠的編號?題目要求是任給老鼠數n,輸出貓最後吃的老鼠的編號...