有一网友,在百度知道寻问一道面试题,题目如下:
一对小兔子一年后长成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为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