奶牛问题
2013-03-03 13:02
711 查看
今天在网上不小心看到一人说了下奶牛问题,觉得特别有意思,因此自己就试了试。原问题是这么描述的:一头奶牛从出生后的第四年开始生育一头小奶牛,以后每年生育一头,第八年后不再生育,第十年死亡。给你一头刚出生的小奶牛,十五年后共有多少头奶牛?
最开始想了一个方法,就是把所有的奶牛都放在一个链表里面,然后依次循环年数,每次循环对链表内的奶牛进行操作,如果在4到8之间,向链表中插入一个新奶牛,如果等于10 ,那么直接从链表中删除,否则不操作。这样就解决问题了:代码如下:
这个时间永远都是不变的,不会随着年份的增加而增加,唯一的缺点就是不知道每个奶牛的母亲是谁,呵呵,第一种方法可以在奶牛里面加个属性可以记录的,这个就实现不了。
最开始想了一个方法,就是把所有的奶牛都放在一个链表里面,然后依次循环年数,每次循环对链表内的奶牛进行操作,如果在4到8之间,向链表中插入一个新奶牛,如果等于10 ,那么直接从链表中删除,否则不操作。这样就解决问题了:代码如下:
private static int count(int years) { List<bull> bulls = new List<bull>(); bulls.Add(new bull(1)); for (int i = 0; i < years; i++ ) { List<bull> newBulls = new List<bull>(); List<bull> oldBulls = new List<bull>(); foreach(var b in bulls) { if (4 <= b.Age && b.Age < 9) { newBulls.Add(new bull(1)); b.Age += 1; } else if (b.Age == 10) { oldBulls.Add(b); } else { b.Age += 1; continue; } } bulls.AddRange(newBulls); foreach(var b in oldBulls) { bulls.Remove(b); } } return bulls.Count; }问题解决了,自己又想想有没有更简单的,因为这样做效率实在太低了,如果年份多了,链表里面的对象增多,那么所消耗的时间将成几何增长。后来又思索得到一方法,建立一个数组,表示当年的一岁到十岁的奶牛,因为一头奶牛只能活到10岁,所以这个数组就够了。操作方式是依次循环年数,每次循环中,首先要记录的是每年产生的新生奶牛,然后就是奶牛年龄增大(把数组从1依次移动到9)。代码如下:
private static int quickCount(int years) { int[] arr = new int[10]; arr[0] = 1; for (int i = 0; i < years; i++ ) { int newCount = 0; for (int j = 3; j < 8; j++ ) { newCount += arr[j]; } for (int k = 9; k > 0; k-- ) { arr[k] = arr[k - 1]; } arr[0] = newCount; //foreach(var s in arr) //{ // Console.Write(s + ","); //} //Console.WriteLine(); } int count = 0; foreach(var c in arr) { count += c; } return count; }
这个时间永远都是不变的,不会随着年份的增加而增加,唯一的缺点就是不知道每个奶牛的母亲是谁,呵呵,第一种方法可以在奶牛里面加个属性可以记录的,这个就实现不了。
相关文章推荐
- 【OSG】运行OSG示例出现的奶牛不完整问题
- 奶牛问题,别人写的,自己试了一下.
- 【OSG】运行OSG示例出现的奶牛不完整问题
- c++ 探讨奶牛生子的问题
- 这里是有个问题要请教-安慰奶牛的Kruscal算法
- ALGO-6 安慰奶牛 — 最小生成树的引申问题(java)
- 腾讯面试题(奶牛产子问题)
- 奶牛产子问题
- 奶牛问题的解决思路
- 匈牙利算法——最大匹配问题(具体例程)—— 过山车问题、奶牛选择问题产奶、飞行员匹配
- 经典“奶牛问题”
- 110_奶牛排队问题 layout (poj 3169)
- Fibonacci扩展(奶牛问题)
- 奶牛浴场——最大子矩形问题
- 奶牛繁殖问题
- 递归算法基础 斐波那契问题几种实现方法 两个经典问题(兔子问题、奶牛问题)
- 蓝桥杯-【安慰奶牛】-最小生成树问题-【C++】
- 再谈奶牛问题
- 奶牛生子问题(腾讯面试题)
- C语言奶牛生子的问题(腾讯面试题)