黑马程序员技术交流社区

标题: 求解:如何程序实现! [打印本页]

作者: 不怕    时间: 2013-6-22 12:26
标题: 求解:如何程序实现!
有一头刚出生的牛,出生后第四年能生一头小牛,以后每年能生一头小牛,小牛在第4年里也能生一头小牛,如此反复。问第20年能有多少头牛?
前提:牛不会死。要求用C#编程
运行后结果是:872,这个结果绝对是正确的

作者: 许大虾    时间: 2013-6-22 13:14
  1. ublic static void CowCal()
  2.         {
  3.             Console.WriteLine("有一头刚出生的牛,出生后第四年能生一头小牛,以后每年能生一头小牛,小牛在第4年里也能生一头小牛,如此反复。问第N年能有多少头牛?");
  4.             Console.Write("请输入N:");
  5.             int n = Convert.ToInt32(Console.ReadLine());

  6.             int total = Cal(n);

  7.             Console.Write("结果是:" + total.ToString() + "头牛");
  8.         }

  9.         private static int Cal(int n)
  10.         {
  11.             int m = 1;
  12.             for (int i = 1; i <= n; i++)
  13.             {
  14.                 if (i % 4 == 0)
  15.                 {
  16.                     m = m * 2;
  17.                 }
  18.             }
  19.             return m;
  20.         }
复制代码

作者: 万大述    时间: 2013-6-24 17:54
你重新对答案看下,结果应该是345头吧,参考代码:
     static void Main(string[] args)
        {
            int year = 0;
            Console.WriteLine("有一头刚出生的牛,出生后第四年能生一头小牛,以后每年能生一头小牛,小牛在第4年里也能生一头小牛,如此反复。问第N年能有多少头牛?");
            Console.Write("请输入年数N:");
            year = ReadInt();
            int[] countLabel = new int[year+1];
            for (int i =0 ; i < year+1; i++)
            {
                if (i < 4)//四年内只有一头牛
                {
                    countLabel[i] = 1;
                }
                else if (i > 3 && i < 8)//4~8年间每年增加一头牛
                {
                    countLabel[i] = i - 2;
                }
                else
                {
                    countLabel[i] = countLabel[i - 4] + countLabel[i - 1];//8年以上的牛数为四年大的牛数加上去你的牛数
                }
            }
            Console.Write("第"+year+"年有" +countLabel[year].ToString()+ "头牛");
            Console.ReadKey();
        }

        static int ReadInt() //该方法要求用户输入一个大于或等于0的整数并返回。
        {
            int number = 0;
            do
            {
                try
                {
                    number = Convert.ToInt32(Console.ReadLine());
                    if (number >= 0)
                    {
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    continue;
                }
            } while (true);
            return number;
        }
作者: 彭家贰小姐    时间: 2013-7-9 10:53
                   //第一年1头
                   //第二年1头
                  //第三年1头
                 //第四年2头
                 //第五年3头
                 //第六年4头
                 //第七年6头
                //第八年9头
                //····
                //可以找出规律
                //即隔一年相加等于后面年份的后一年
                //第一年的和第三年的加起来等于第四年的
               //第二年的和第五年的加起来等于第六年的
              //依此类推 可以用递归来做
              class MyTest
              {
                static void Main()
                {
                        Console.WriteLine("请输入年份");
                        int alter = Convert.ToInt32(Console.ReadLine());
                        Console.WriteLine("结果:" + GetValue(alter));
                        Console.ReadKey();
                }
               public int GetValue(int year)
                {
                        if (year < 4) return 1;
                        int[] arr = new int[4] { 0, 1, 1, 1 };
                        int[] yearArr = new int[year + 1];
                        yearArr[0] = 0;
                        yearArr[1] = 1;
                        yearArr[2] = 1;
                        yearArr[3] = 1;
                        yearArr[year] = GetValue(year -3) + GetValue(year -1);
                        return yearArr[year];
                }
               }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2