再谈奶牛问题
2009-12-09 15:38
246 查看
在博客园上看到很多人讨论的”在csdn上看到奶牛问题,写了下算法“和“奶牛问题”,觉得好玩,自己尝试着用面向对象的方法算了一下,练练手,没有技术含量,记录下来。
一、问题还原
一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只?
ps:看到很多人在原题处留言说这题出的不严谨云云。下面的所有实现都是在理想状态下,特此声明。
二、具体实现
1、奶牛实体类
代码
class Program
{
static List<Cow> listCows = new List<Cow>();
static int maxYear = 20;
public static void GetBirth(int year)
{
List<Cow> listBornCows = new List<Cow>();//用于添加新生的奶牛
Cow firstCow = new Cow(1, 1, 1, 0);
listCows.Add(firstCow);
for (int i = 0; i < year; i++)
{
foreach (Cow item in listCows)
{
item.Age++; //年龄自增
if (item.Age > 4)
{
//生出一头牛
Cow birth = new Cow(1, item.Generation + 1, listCows.Count + 1, item.Id);
listBornCows.Add(birth); //添加新生的奶牛
}
}
listCows.AddRange(listBornCows);
listBornCows.Clear();
}
}
public static List<Cow> GetCowByParentId(int parentId)
{
List<Cow> result = new List<Cow>();
foreach (Cow item in listCows)
{
if (item.ParentId == parentId)
{
result.Add(item);
}
}
return result;
}
public static void ShowCows()
{
int count = 0;
if (listCows != null)
{
count = listCows.Count;
}
Console.WriteLine(string.Format("After 20 years,cows count:{0}", count.ToString()));
/*下面按照所属母亲(ParentId)显示对应奶牛数*/
int maxParentId = 0;
if (listCows.Count > 0)
{
//按照所属母亲 逆序排序
listCows.Sort(delegate(Cow left, Cow right) { return right.ParentId.CompareTo(left.ParentId); });
maxParentId = listCows[0].ParentId;
}
for (int i = 0; i < maxParentId; i++)
{
List<Cow> listModels = GetCowByParentId(i);
Console.WriteLine(string.Format("Cow_{0}'s children as follows:", i));
if (listModels.Count == 0)
{
Console.WriteLine("Has no any child!");
}
else
{
foreach (Cow item in listModels)
{
Console.WriteLine(string.Format("Age:{0},Id:{1},Generation:{2}", item.Age, item.Id, item.Generation));
}
}
}
}
static void Main(string[] args)
{
GetBirth(maxYear);
ShowCows();
Console.ReadLine();
}
}
一、问题还原
一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只?
ps:看到很多人在原题处留言说这题出的不严谨云云。下面的所有实现都是在理想状态下,特此声明。
二、具体实现
1、奶牛实体类
代码
class Program
{
static List<Cow> listCows = new List<Cow>();
static int maxYear = 20;
public static void GetBirth(int year)
{
List<Cow> listBornCows = new List<Cow>();//用于添加新生的奶牛
Cow firstCow = new Cow(1, 1, 1, 0);
listCows.Add(firstCow);
for (int i = 0; i < year; i++)
{
foreach (Cow item in listCows)
{
item.Age++; //年龄自增
if (item.Age > 4)
{
//生出一头牛
Cow birth = new Cow(1, item.Generation + 1, listCows.Count + 1, item.Id);
listBornCows.Add(birth); //添加新生的奶牛
}
}
listCows.AddRange(listBornCows);
listBornCows.Clear();
}
}
public static List<Cow> GetCowByParentId(int parentId)
{
List<Cow> result = new List<Cow>();
foreach (Cow item in listCows)
{
if (item.ParentId == parentId)
{
result.Add(item);
}
}
return result;
}
public static void ShowCows()
{
int count = 0;
if (listCows != null)
{
count = listCows.Count;
}
Console.WriteLine(string.Format("After 20 years,cows count:{0}", count.ToString()));
/*下面按照所属母亲(ParentId)显示对应奶牛数*/
int maxParentId = 0;
if (listCows.Count > 0)
{
//按照所属母亲 逆序排序
listCows.Sort(delegate(Cow left, Cow right) { return right.ParentId.CompareTo(left.ParentId); });
maxParentId = listCows[0].ParentId;
}
for (int i = 0; i < maxParentId; i++)
{
List<Cow> listModels = GetCowByParentId(i);
Console.WriteLine(string.Format("Cow_{0}'s children as follows:", i));
if (listModels.Count == 0)
{
Console.WriteLine("Has no any child!");
}
else
{
foreach (Cow item in listModels)
{
Console.WriteLine(string.Format("Age:{0},Id:{1},Generation:{2}", item.Age, item.Id, item.Generation));
}
}
}
}
static void Main(string[] args)
{
GetBirth(maxYear);
ShowCows();
Console.ReadLine();
}
}
相关文章推荐
- 奶牛繁殖问题
- 奶牛问题
- 【OSG】运行OSG示例出现的奶牛不完整问题
- 110_奶牛排队问题 layout (poj 3169)
- Fibonacci扩展(奶牛问题)
- 匈牙利算法——最大匹配问题(具体例程)—— 过山车问题、奶牛选择问题产奶、飞行员匹配
- 安慰奶牛 问题描述 Farmer John变得非常懒,他不想再继续维
- 奶牛问题(链家网)
- 图的最短路径问题————树上奶牛(tree.cpp)
- 在csdn上看到奶牛问题,写了下算法
- 奶牛生子问题(腾讯面试题)
- 分治递归之奶牛过河问题
- 奶牛问题
- P1868 饥饿的奶牛(区间问题)
- 奶牛问题,别人写的,自己试了一下.
- c++ 探讨奶牛生子的问题
- 奶牛生子问题(关键字,奶牛,生子,第4年,母牛,每年生一只,20年)
- 奶牛问题的解决思路
- 经典“奶牛问题”
- 奶牛问题