农夫养牛问题,四种方法
来源:互联网 发布:怎样查看淘宝价格曲线 编辑:程序博客网 时间:2024/04/30 10:13
- namespace AsyncCMdObjectApp
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("请输入年份:");
- int n = Convert.ToInt32(Console.ReadLine());
- Console.Write("/r最终有" + Calculate(n) + "头牛/n");
- Console.Write("/r最终有" + Recursion(n) + "头牛/n");
- Console.Write("/r最终有" + FIb(n) + "头牛/n");
- countnum(n + 1);
- }
- //方法一
- static int FIb(int year)
- {
- if (year == 1 || year == 2 || year == 3)
- return 1;
- else
- {
- return FIb(year - 1) + FIb(year - 3);
- }
- }
- //方法二
- static int Calculate(int year) //非递归
- {
- int Cow2 = 1;
- int Cow1 = 0;
- int Cow0 = 0;
- for (int i = 1; i < year; i++)
- {
- int t = Cow0;
- Cow0 += Cow1;
- Cow1 = Cow2;
- Cow2 = t;
- }
- return Cow0 + Cow1 + Cow2;
- }
- //方法三
- static int Recursion(int year)//递归
- {
- int c = 1;
- for (int i = 1; i <= year; i++)
- {
- if (i > 3)
- c += Recursion(year - i + 1);
- }
- return c;
- }
- //方法四(最初)
- private static void countnum(int n)
- {
- //每年牛的总数
- int[] sum = new int[n];
- //当年老牛的数量(明年可以生孩子的牛)
- int[] oldcow = new int[n];
- //当年2岁大的牛的数量
- int[] cow2 = new int[n];
- //当年1岁大的牛的数量
- int[] cow1 = new int[n];
- //当年0岁大的牛的数量
- int[] cow0 = new int[n];
- //如果年份小于等于三,返回1
- if (n > 2)
- {
- //初始化前三年各个数组数量
- sum[0] = 1; sum[1] = 1; sum[2] = 1;
- oldcow[0] = oldcow[1] = oldcow[2] = 0;
- cow2[0] = 0; cow2[1] = 0; cow2[2] = 1;
- cow1[0] = 0; cow1[1] = 1; cow1[2] = 0;
- cow0[0] = 1; cow0[1] = 0; cow0[2] = 0;
- int year = 3;
- while (year < n)
- {
- //下一年牛总数
- sum[year] = sum[year - 1] + oldcow[year - 1];
- //下一年的老牛
- oldcow[year] = oldcow[year - 1] + cow2[year - 1];
- //下一年2岁大的牛数量
- cow2[year] = cow1[year - 1];
- //下一年1岁大的牛数量
- cow1[year] = cow0[year - 1];
- //下一年0岁大的牛数量
- cow0[year] = oldcow[year];
- year++;
- }
- }
- for (int k = 1; k < n; k++)
- Console.WriteLine("第{0}年共有{1}头牛", k, sum[k]);
- }
- }
- }
第五种方法面向对象的方法
- public static class store
- {
- public static ArrayList list = new ArrayList();
- }
- class Cow
- {
- int age = 0;
- public void play()
- {
- age++;
- if (age > 3)
- {
- store.list.Add(new Cow());
- }
- }
- }
- static void Process(int n)
- {
- if (n <= 3)
- Console.WriteLine("第{0}年共有1头牛", n);
- else
- {
- for (int i = 1; i < n+ 1; i++)
- {
- ArrayList list_ = store.list;
- if (i == 1)
- {
- store.list.Add(new Cow());
- }
- for (int j = 0; j < list_.Count; j++)
- {
- Cow c = (Cow)list_[j];
- c.play();
- }
- Console.WriteLine("第{0}年共有{1}头牛", i, list_.Count);
- }
- }
- }
- 农夫养牛问题,四种方法
- 农夫养牛de 问题
- 农夫养牛问题
- 农夫养牛问题
- 农夫养牛问题
- 经典的农夫养牛问题
- 经典的农夫养牛问题
- 经典的农夫养牛问题
- 农夫养牛
- 农夫养牛
- 农夫养牛问题的实现算法
- 农夫养牛问题 (将牛分为三种小牛、中牛、大牛)
- 斐波那契数列 农夫养牛问题(转载)
- 从农夫养牛问题推广到斐波那契数列
- 经典面试题------农夫养牛
- 经典的农夫养牛问题(常考的面试题)
- 经典的农夫养牛题目,C语言,递归实现
- 农夫过河问题实现
- lalalala
- 产生随机数
- 456789
- 2010-12-23 spring in action
- 刚刚加入。学习java
- 农夫养牛问题,四种方法
- OStask2
- 谁会的来帮一下忙啊!急啊
- FTP服务器的配置
- 呵呵
- 新的开始
- 农夫养牛问题 (将牛分为三种小牛、中牛、大牛)
- goto模拟循环
- OS Process Task 安排