首页 > 其他 > 详细

母牛6岁生小牛问题

时间:2014-04-08 22:53:23      阅读:640      评论:0      收藏:0      [点我收藏+]

题目:

  1、每头牛6牛的时候开始生小牛,并且生得牛都是母牛;

  2、农场来了一头6岁的牛(第一年就生下一头小牛);

问:

  20年后,农场有多少头牛;

 

解题思路1:

  我拿到这个问题的第一反应就是使用对象,建立一个Cow类,然后有一个age属性,再用一个全局变量cows来记录牛的数量,每当我们实例化一个牛cows就会+1。

bubuko.com,布布扣
 1 class Cow {
 2     int age;            //牛的年龄
 3     static int cows = 0;     //全局变量,用来记录实例化的次数
 4 
 5     {
 6         this.cows++;     //构造代码块,在对象初始化的时候就会增加cows
 7     }
 8 
 9     Cow(int age) {      //初始化方法
10         this.age = age;
11     }
12 
13     void growUp() {     //没过一年牛就会长一岁
14         this.age++;
15     }
16 }
bubuko.com,布布扣

 

  接下来是main方法,只需要设置一个年数的for循环,再判断牛的年龄是否大于或等于6,大的话就实例化一个新的对象,最后输出结果:

 

bubuko.com,布布扣
 1 public class WoCow {
 2     public static void main(String[] args) {
 3         Cow cow[] = new Cow[300];
 4         int cows = 0;
 5         cow[0] = new Cow(6);
 6 
 7         for (int year = 1; year <= 20; year++) {
 8             cows = Cow.cows;
 9             System.out.println("今年是第:" + year + "年");
10             for (int i = 0; i < cows; i++) {
11                 cow[i].growUp();
12                 if (cow[i].age >= 6) {
13                     cow[Cow.cows] = new Cow(0);
14                 }
15             }
16             System.out.println("有" + Cow.cows + "只牛");
17         }
18     }
19 }
bubuko.com,布布扣

 

运行结果:

 

bubuko.com,布布扣
 1 今年是第:1年
 2 有2只牛
 3 今年是第:2年
 4 有3只牛
 5 今年是第:3年
 6 有4只牛
 7 今年是第:4年
 8 有5只牛
 9 今年是第:5年
10 有6只牛
11 今年是第:6年
12 有7只牛
13 今年是第:7年
14 有9只牛
15 今年是第:8年
16 有12只牛
17 今年是第:9年
18 有16只牛
19 今年是第:10年
20 有21只牛
21 今年是第:11年
22 有27只牛
23 今年是第:12年
24 有34只牛
25 今年是第:13年
26 有43只牛
27 今年是第:14年
28 有55只牛
29 今年是第:15年
30 有71只牛
31 今年是第:16年
32 有92只牛
33 今年是第:17年
34 有119只牛
35 今年是第:18年
36 有153只牛
37 今年是第:19年
38 有196只牛
39 今年是第:20年
40 有251只牛
bubuko.com,布布扣

 

  以上是使用对象的方法,下面我们来探索其中的规律:

年数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
新增牛的数量 1 1 1 1 1 1 1                            

 

  我们从0年开始,因为已经有一只6岁的母牛了。第一年它生下了一只,因为它已经是大于6岁了,一直到前六6年每年只增加1只,因为其他的牛都是小于6岁的。但是到了第七年就发生的变化,在第1年生下的牛到了第7年刚好6岁,先在能生育的牛多了一只,以此类推:

 

年数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
新增牛的数量 1 1 1 1 1 1 1  2  3  4  5  6  7                

 

  到了第13年的时候又发生了变化,因为在第7点出生的两头牛已经6岁了 :

 

年数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
新增牛的数量 1 1 1 1 1 1 1  2  3  4  5  6  7  9  12  16  21  27  34  43 55

 

  由此不难发现其中的规律:如果年数大于6年的话,那么第N年增加牛的数量就是(N-5)年前所有增加牛的数量的和:

    举例:

      第7年增加牛的数量是:第0年的数量+第1年的数量

      第8年增加牛的数量是:第0年 到 第2年的数量和

      第13年增加牛的数量: 第0年到 第7年的数量和

      ……………………

  根据这个规律,我们开始写代码:

 

bubuko.com,布布扣
 1     int getCows(int year) {
 2 
 3         int sum = 0;
 4         if (year < 7) {
 5             return 1;
 6         }
 7         for (int i = 0; i < year - 5; i++) {
 8             sum += getCows(i);  //递归方法
 9         }
10         return sum;
11     }
bubuko.com,布布扣

 

  我们定义了一个getCows()方法,这个方法的返回值就会告诉我们,当年会增加多少头牛,下面我们写main方法:

bubuko.com,布布扣
1     public static void main(String[] args) {
2         int sum = 0;
3         ArrayCow cow = new ArrayCow();
4 
5         for (int i = 0; i < 21; i++) {
6             sum += cow.getCows(i);
7         }
8         System.out.println(sum);
9     }
bubuko.com,布布扣

 

运行结果:

 

1 251

 

 

母牛6岁生小牛问题,布布扣,bubuko.com

母牛6岁生小牛问题

原文:http://www.cnblogs.com/srun/p/3650382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!