A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不怕 中级黑马   /  2013-6-22 12:26  /  1895 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一头刚出生的牛,出生后第四年能生一头小牛,以后每年能生一头小牛,小牛在第4年里也能生一头小牛,如此反复。问第20年能有多少头牛?
前提:牛不会死。要求用C#编程
运行后结果是:872,这个结果绝对是正确的

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

3 个回复

倒序浏览
  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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
你重新对答案看下,结果应该是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;
        }
回复 使用道具 举报
                   //第一年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];
                }
               }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马