老师出的变态C#算法题目。
刚学.NET第一节课老师就出了这样一个变态的题目。题目如下:岛上有20只1岁的兔子,兔子3岁可以结婚,寿命为5年,结婚后每个家庭每年可以生出12个小兔子,请问10年后这个...
刚学.NET第一节课 老师就出了这样一个变态的题目。
题目如下:
岛上有20只1岁的兔子,兔子3岁可以结婚,寿命为5年,结婚后每个家庭每年可以生出12个小兔子,请问10年后这个岛上有多少只兔子?
请用C#写出算法。。
谁能给个思路 ,谢谢! 展开
题目如下:
岛上有20只1岁的兔子,兔子3岁可以结婚,寿命为5年,结婚后每个家庭每年可以生出12个小兔子,请问10年后这个岛上有多少只兔子?
请用C#写出算法。。
谁能给个思路 ,谢谢! 展开
6个回答
展开全部
简单!循环求每一年:1岁的兔子数,2岁的兔子数,3岁的兔子数,4岁的兔子数,5岁的兔子数,家庭的个数。
弄清楚兔子岁数之间的运算就行了!
可以放在一个数组里面,循环10次就到10年后的各个年龄的兔子的数目相加就行了!
不过有好多的问题,如果有“兔子老牛吃嫩草”,“兔子离婚了”,“一个兔子搞多个对象”怎么办?
下面的代码仅供参考:
int iAge1 = 20;
int iAge2 = 0;
int iAge3 = 0;
int iAge4 = 0;
int iAge5 = 0;
int iCountFamily = 0;
int iYearLater=10;
int iSum = 0;
for (int i = 1; i <= iYearLater; i++)
{
iAge5 = iAge4 ;
iAge4 = iAge3 ;
iAge3 = iAge2 ;
iAge2 = iAge1 ;
iAge1 = iCountFamily * 12;
iCountFamily = (iAge3 + iAge4 + iAge5) / 2;
}
iSum = iAge5 + iAge4 + iAge3 + iAge2 + iAge1;
//Console.WriteLine("{0}年后兔子的个数为:{1}",iYearLater,iSum);
//Console.ReadLine();
弄清楚兔子岁数之间的运算就行了!
可以放在一个数组里面,循环10次就到10年后的各个年龄的兔子的数目相加就行了!
不过有好多的问题,如果有“兔子老牛吃嫩草”,“兔子离婚了”,“一个兔子搞多个对象”怎么办?
下面的代码仅供参考:
int iAge1 = 20;
int iAge2 = 0;
int iAge3 = 0;
int iAge4 = 0;
int iAge5 = 0;
int iCountFamily = 0;
int iYearLater=10;
int iSum = 0;
for (int i = 1; i <= iYearLater; i++)
{
iAge5 = iAge4 ;
iAge4 = iAge3 ;
iAge3 = iAge2 ;
iAge2 = iAge1 ;
iAge1 = iCountFamily * 12;
iCountFamily = (iAge3 + iAge4 + iAge5) / 2;
}
iSum = iAge5 + iAge4 + iAge3 + iAge2 + iAge1;
//Console.WriteLine("{0}年后兔子的个数为:{1}",iYearLater,iSum);
//Console.ReadLine();
展开全部
刚做了一个你参考下吧
//岛上有20只1岁的兔子,兔子3岁可以结婚,寿命为5年,
//结婚后每个家庭每年可以生出12个小兔子,
//请问10年后这个岛上有多少只兔子
思路:前五年兔子数量只增不减
//****这个数组反映的是这一年 各年龄兔子的 数量 情况 --这个理解了就好办了
int[] all={ 20, 0, 0, 0, 0 };
int[] every = new int[5];
/// <summary>
/// 最后输出计算 最后调用的函数
/// </summary>
/// <param name="oneyear">查看第几年的兔子</param>
private void end(int oneyear)
{
int allyear = 0;
for (int year = 1; year <= oneyear; year++)
{
if (year > 1)
{
everyyear(year, oneyear);
}
allyear = year;
}
int count = 0;
Response.Write(allyear + " 年---兔子各个年龄数量:</br>");
if (allyear > 1)
{
for (int i = 0; i < every.Length; i++)
{
count += every[i];
Response.Write(every[i] + " ");
Response.Write("</br>");
}
}
else
{
for (int i = 0; i < all.Length; i++)
{
count += all[i];
Response.Write(all[i] + " ");
Response.Write("</br>");
}
}
Response.Write(allyear + " 年---兔子总数量:" + count);
}
/// <summary>
/// 每年兔子数量和年龄表
/// </summary>
/// <param name="year">第几年</param>
/// <param name="endoutyear">最后输出的年份 此年不杀死 5年兔</param>
private void everyyear(int year, int endoutyear)
{
///every每年变化的表 all前一年兔子表
every[0] = 0;
every[1] = all[0];
every[2] = all[1];
every[3] = all[2];
every[4] = all[3];
all[0] = every[0];
all[1] = every[1];
all[2] = every[2];
all[3] = every[3];
all[4] = every[4];
every[0] = all[2] * 12 + all[3] * 12 + all[4] * 12;
///every每年变化的表 all前一年兔子表
all[0] = every[0];
all[1] = every[1];
all[2] = every[2];
all[3] = every[3];
all[4] = every[4];
if (year >= 5)
{
if (year != endoutyear)
{
every[4] = 0;
all[4] = 0;
}
}
}
//岛上有20只1岁的兔子,兔子3岁可以结婚,寿命为5年,
//结婚后每个家庭每年可以生出12个小兔子,
//请问10年后这个岛上有多少只兔子
思路:前五年兔子数量只增不减
//****这个数组反映的是这一年 各年龄兔子的 数量 情况 --这个理解了就好办了
int[] all={ 20, 0, 0, 0, 0 };
int[] every = new int[5];
/// <summary>
/// 最后输出计算 最后调用的函数
/// </summary>
/// <param name="oneyear">查看第几年的兔子</param>
private void end(int oneyear)
{
int allyear = 0;
for (int year = 1; year <= oneyear; year++)
{
if (year > 1)
{
everyyear(year, oneyear);
}
allyear = year;
}
int count = 0;
Response.Write(allyear + " 年---兔子各个年龄数量:</br>");
if (allyear > 1)
{
for (int i = 0; i < every.Length; i++)
{
count += every[i];
Response.Write(every[i] + " ");
Response.Write("</br>");
}
}
else
{
for (int i = 0; i < all.Length; i++)
{
count += all[i];
Response.Write(all[i] + " ");
Response.Write("</br>");
}
}
Response.Write(allyear + " 年---兔子总数量:" + count);
}
/// <summary>
/// 每年兔子数量和年龄表
/// </summary>
/// <param name="year">第几年</param>
/// <param name="endoutyear">最后输出的年份 此年不杀死 5年兔</param>
private void everyyear(int year, int endoutyear)
{
///every每年变化的表 all前一年兔子表
every[0] = 0;
every[1] = all[0];
every[2] = all[1];
every[3] = all[2];
every[4] = all[3];
all[0] = every[0];
all[1] = every[1];
all[2] = every[2];
all[3] = every[3];
all[4] = every[4];
every[0] = all[2] * 12 + all[3] * 12 + all[4] * 12;
///every每年变化的表 all前一年兔子表
all[0] = every[0];
all[1] = every[1];
all[2] = every[2];
all[3] = every[3];
all[4] = every[4];
if (year >= 5)
{
if (year != endoutyear)
{
every[4] = 0;
all[4] = 0;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个递归.我就不给你说代码了.那样影响你的学习.建议想一下.那是个递归调用.多算一下.有一个函数.然后去不断的调用.知道一种结果跳出.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
昏迷!! 20只公兔 怎么样算?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
4楼太逗了,我怎么没想到.让你们老师去学一下生物课.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询