农夫养牛问题,四种方法

来源:互联网 发布:怎样查看淘宝价格曲线 编辑:程序博客网 时间:2024/04/30 10:13
Code:
  1. namespace AsyncCMdObjectApp   
  2. {   
  3.     class Program   
  4.     {   
  5.         static void Main(string[] args)   
  6.         {   
  7.             Console.WriteLine("请输入年份:");   
  8.             int n = Convert.ToInt32(Console.ReadLine());   
  9.             Console.Write("/r最终有" + Calculate(n) + "头牛/n");   
  10.             Console.Write("/r最终有" + Recursion(n) + "头牛/n");   
  11.             Console.Write("/r最终有" + FIb(n) + "头牛/n");   
  12.             countnum(n + 1);   
  13.         }   
  14.         //方法一   
  15.         static int FIb(int year)   
  16.         {   
  17.             if (year == 1 || year == 2 || year == 3)   
  18.                 return 1;   
  19.             else  
  20.             {   
  21.                 return FIb(year - 1) + FIb(year - 3);   
  22.             }   
  23.   
  24.   
  25.         }   
  26.         //方法二   
  27.         static int Calculate(int year) //非递归   
  28.         {   
  29.             int Cow2 = 1;   
  30.             int Cow1 = 0;   
  31.             int Cow0 = 0;   
  32.             for (int i = 1; i < year; i++)   
  33.             {   
  34.                 int t = Cow0;   
  35.                 Cow0 += Cow1;   
  36.                 Cow1 = Cow2;   
  37.                 Cow2 = t;   
  38.             }   
  39.             return Cow0 + Cow1 + Cow2;   
  40.         }   
  41.         //方法三   
  42.         static int Recursion(int year)//递归   
  43.         {   
  44.             int c = 1;   
  45.             for (int i = 1; i <= year; i++)   
  46.             {   
  47.                 if (i > 3)   
  48.                     c += Recursion(year - i + 1);   
  49.             }   
  50.             return c;   
  51.         }   
  52.         //方法四(最初)   
  53.         private static void countnum(int n)   
  54.         {   
  55.             //每年牛的总数   
  56.             int[] sum = new int[n];   
  57.             //当年老牛的数量(明年可以生孩子的牛)   
  58.             int[] oldcow = new int[n];   
  59.             //当年2岁大的牛的数量   
  60.             int[] cow2 = new int[n];   
  61.             //当年1岁大的牛的数量   
  62.             int[] cow1 = new int[n];   
  63.             //当年0岁大的牛的数量   
  64.             int[] cow0 = new int[n];   
  65.               
  66.             //如果年份小于等于三,返回1   
  67.             if (n > 2)   
  68.             {   
  69.                 //初始化前三年各个数组数量   
  70.                 sum[0] = 1; sum[1] = 1; sum[2] = 1;   
  71.                 oldcow[0] = oldcow[1] = oldcow[2] = 0;   
  72.                 cow2[0] = 0; cow2[1] = 0; cow2[2] = 1;   
  73.                 cow1[0] = 0; cow1[1] = 1; cow1[2] = 0;   
  74.                 cow0[0] = 1; cow0[1] = 0; cow0[2] = 0;   
  75.                 int year = 3;   
  76.                 while (year < n)   
  77.                 {   
  78.                     //下一年牛总数   
  79.                     sum[year] = sum[year - 1] + oldcow[year - 1];   
  80.                     //下一年的老牛   
  81.                     oldcow[year] = oldcow[year - 1] + cow2[year - 1];   
  82.                     //下一年2岁大的牛数量   
  83.                     cow2[year] = cow1[year - 1];   
  84.                     //下一年1岁大的牛数量   
  85.                     cow1[year] = cow0[year - 1];   
  86.                     //下一年0岁大的牛数量   
  87.                     cow0[year] = oldcow[year];   
  88.                     year++;   
  89.                 }   
  90.             }   
  91.   
  92.                
  93.             for (int k = 1; k < n; k++)   
  94.   
  95.                 Console.WriteLine("第{0}年共有{1}头牛", k, sum[k]);   
  96.         }   
  97. }   
  98. }  

 第五种方法面向对象的方法

Code:
  1. public static class store   
  2.     {   
  3.         public static ArrayList list = new ArrayList();   
  4.     }   
  5.   
  6.     class Cow   
  7.     {   
  8.         int age = 0;   
  9.         public void play()   
  10.         {   
  11.             age++;   
  12.             if (age > 3)   
  13.             {   
  14.                 store.list.Add(new Cow());   
  15.             }   
  16.         }   
  17.     }   
  18. static void Process(int n)   
  19.         {   
  20.             if (n <= 3)   
  21.                 Console.WriteLine("第{0}年共有1头牛", n);   
  22.             else  
  23.             {   
  24.                 for (int i = 1; i < n+ 1; i++)   
  25.                 {   
  26.                     ArrayList list_ = store.list;   
  27.                     if (i == 1)   
  28.                     {   
  29.                         store.list.Add(new Cow());   
  30.                     }   
  31.   
  32.                     for (int j = 0; j < list_.Count; j++)   
  33.                     {   
  34.                         Cow c = (Cow)list_[j];   
  35.                         c.play();   
  36.   
  37.                     }   
  38.                     Console.WriteLine("第{0}年共有{1}头牛", i, list_.Count);   
  39.                 }        
  40.             }   
  41.         }  

 

原创粉丝点击