有一網友,在百度知道尋問一道面試題,題目如下:
一對小兔子一年後長成大兔子;一對大兔子每半年生一對小兔子。大兔子的繁殖期爲4年,兔子的壽命是6年。假定第一年年初投放了一對小兔子,試編程計算,第n年末總共會有多少對兔子。n由鍵盤輸入。(用遞歸哦,謝謝!)
----------------------------------------------------------
於是我先寫出瞭解題思路,如下:
/ * 小兔子 大兔子 生育
*1年 1
*2年 0 1(1歲)
*2.5 1(第二代) 1(1.5歲) 第一代1次
*3 1(第二代0.5歲)+1(第三代) 1(2歲) 第一代2次
*3.5 1(第三代0.5歲)+1(第四代) 1(第一代2.5歲)+1(第二代1歲) 第一代3次
*4 1(第四代0.5歲)+2(第五代) 1(第一代3歲)+1(第二代1.5歲)+1(第三代1歲) 第一代4次,第二代1次
*4.5 2(第五代0.5歲)+2(第六代) 1(第一代3.5歲)+1(第二代2歲)+1(第三代1.5)+1(第四代1歲) 第一代5次第二代2次,第三代1次
*5 1(第一代4歲)6次
*5.5 1(第一代4.5)7次
*6 1(第一代5歲)8次,已繁殖了4年
*6.5 1(第一代5.5歲)
*
*
*/
我數學不太好,這是用笨方法列出來的,找出來了其規律及邏輯要點。於是我編寫出了下述代碼。
02 |
using
System.Collections.Generic; |
04 |
namespace
zuo_TestProject{ |
10 |
Console.Write( "請輸入要測試的年數:" ); |
11 |
string Sinput = Console.ReadLine(); |
13 |
if ( double .TryParse(Sinput, out dyear)){ |
15 |
int count = fs.GetNum(dyear); |
16 |
Console.WriteLine( "\r\n{0}年以後兔子的對數爲:{1}" ,dyear,count); |
19 |
Console.WriteLine( "\r\n您輸入的有誤\r\n" ); |
29 |
private int rabbit_Type; |
33 |
this .rabbit_Type = dai; |
37 |
get { return this .rabbit_Type;
} |
42 |
set { this .age = value; } |
50 |
private List<Rabbit> rlst; |
51 |
private double startTime; |
54 |
rlst = new List<Rabbit>(); |
55 |
rlst.Add( new Rabbit( this .era)); |
58 |
public int GetNum( double nYear){ |
59 |
if (nYear- this .startTime<=0.0){ |
63 |
Console.WriteLine( "當前年份:{0}" , this .startTime); |
65 |
List<Rabbit> nrs = rlst.FindAll(r=>r.Age>=1.5&&r.Age<5.5); |
70 |
for ( int i=0;i<nrs.Count;i++){ |
71 |
Console.WriteLine( "------誰生了:第{0}代,當前壽命{1}" ,nrs[i].RabbitType,nrs[i].Age); |
72 |
rlst.Add( new Rabbit( this .era)); |
76 |
int killNum = rlst.RemoveAll(r=>r.Age>=6.0); |
77 |
Console.WriteLine( "========當前生亡數量:{0}" ,killNum); |
78 |
Console.WriteLine( "========當前存活數量:{0}" ,rlst.Count); |
80 |
this .startTime += 0.5; |
81 |
foreach (Rabbit rt in rlst){
|
這個小題挺有意思,一開始編的時候竟然盲目的想用幾個變量就解決此題,當時還一根筋的用了個數學公式,結果仔細一想不對,於是又用笨方法推理出來了整個過程,所以才編寫出來了這段代碼,特分享給衆位朋友,其實我也想知道還有沒有更簡潔的寫法,由於我水平有限,只能想到這個了,分享的同時,也想換大家點更優秀的代碼,看看有沒有更加優質的代碼能寫出替代的小程序。恭候大家跟貼優秀代碼、優秀算法。
下面是程序運行測試的結果:
請輸入要測試的年數:7
當前年份:0
=======當前生亡數量:0
=======當前存活數量:1
當前年份:0.5
=======當前生亡數量:0
=======當前存活數量:1
當前年份:1
=======當前生亡數量:0
=======當前存活數量:1
當前年份:1.5
-----誰生了:第1代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:2
當前年份:2
-----誰生了:第1代,當前壽命2
=======當前生亡數量:0
=======當前存活數量:3
當前年份:2.5
-----誰生了:第1代,當前壽命2.5
=======當前生亡數量:0
=======當前存活數量:4
當前年份:3
-----誰生了:第1代,當前壽命3
-----誰生了:第2代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:6
當前年份:3.5
-----誰生了:第1代,當前壽命3.5
-----誰生了:第2代,當前壽命2
-----誰生了:第3代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:9
當前年份:4
-----誰生了:第1代,當前壽命4
-----誰生了:第2代,當前壽命2.5
-----誰生了:第3代,當前壽命2
-----誰生了:第4代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:13
當前年份:4.5
-----誰生了:第1代,當前壽命4.5
-----誰生了:第2代,當前壽命3
-----誰生了:第3代,當前壽命2.5
-----誰生了:第4代,當前壽命2
-----誰生了:第5代,當前壽命1.5
-----誰生了:第5代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:19
當前年份:5
-----誰生了:第1代,當前壽命5
-----誰生了:第2代,當前壽命3.5
-----誰生了:第3代,當前壽命3
-----誰生了:第4代,當前壽命2.5
-----誰生了:第5代,當前壽命2
-----誰生了:第5代,當前壽命2
-----誰生了:第6代,當前壽命1.5
-----誰生了:第6代,當前壽命1.5
-----誰生了:第6代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:28
當前年份:5.5
-----誰生了:第2代,當前壽命4
-----誰生了:第3代,當前壽命3.5
-----誰生了:第4代,當前壽命3
-----誰生了:第5代,當前壽命2.5
-----誰生了:第5代,當前壽命2.5
-----誰生了:第6代,當前壽命2
-----誰生了:第6代,當前壽命2
-----誰生了:第6代,當前壽命2
-----誰生了:第7代,當前壽命1.5
-----誰生了:第7代,當前壽命1.5
-----誰生了:第7代,當前壽命1.5
-----誰生了:第7代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:40
當前年份:6
-----誰生了:第2代,當前壽命4.5
-----誰生了:第3代,當前壽命4
-----誰生了:第4代,當前壽命3.5
-----誰生了:第5代,當前壽命3
-----誰生了:第5代,當前壽命3
-----誰生了:第6代,當前壽命2.5
-----誰生了:第6代,當前壽命2.5
-----誰生了:第6代,當前壽命2.5
-----誰生了:第7代,當前壽命2
-----誰生了:第7代,當前壽命2
-----誰生了:第7代,當前壽命2
-----誰生了:第7代,當前壽命2
-----誰生了:第8代,當前壽命1.5
-----誰生了:第8代,當前壽命1.5
-----誰生了:第8代,當前壽命1.5
-----誰生了:第8代,當前壽命1.5
-----誰生了:第8代,當前壽命1.5
-----誰生了:第8代,當前壽命1.5
=======當前生亡數量:1
=======當前存活數量:57
當前年份:6.5
-----誰生了:第2代,當前壽命5
-----誰生了:第3代,當前壽命4.5
-----誰生了:第4代,當前壽命4
-----誰生了:第5代,當前壽命3.5
-----誰生了:第5代,當前壽命3.5
-----誰生了:第6代,當前壽命3
-----誰生了:第6代,當前壽命3
-----誰生了:第6代,當前壽命3
-----誰生了:第7代,當前壽命2.5
-----誰生了:第7代,當前壽命2.5
-----誰生了:第7代,當前壽命2.5
-----誰生了:第7代,當前壽命2.5
-----誰生了:第8代,當前壽命2
-----誰生了:第8代,當前壽命2
-----誰生了:第8代,當前壽命2
-----誰生了:第8代,當前壽命2
-----誰生了:第8代,當前壽命2
-----誰生了:第8代,當前壽命2
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
-----誰生了:第9代,當前壽命1.5
=======當前生亡數量:0
=======當前存活數量:84
年以後兔子的對數爲:84