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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田磊阳   /  2013-4-9 23:41  /  7180 人查看  /  90 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Oxen
{
        private int n;
        private int[] a;
         Oxen(int n){
                this.n = n;
                init();
                getNumber(n);
        }
                public void init(){
                a = new int[n];
                a[0] =1;
                a[1] =1;
                a[2] =2;
                }
                public void getNumber(int t){       
                for(int i=3;i<t;i++){
                        a[i]=a[i-1]+a[i-3];
                }
                for(int i=0; i<t; i++){               
                        System.out.println("第"+(i+1)+"年是"+a[i]+"头牛");
                }
                }
}
class OxenNumber
{
        public static void main(String[] args)
        {
        new Oxen(10);
        new Oxen(20);
        new Oxen(30);
        }
}

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报

农夫10年后有28头牛
  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;

  5. /**
  6. * 问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以内年生出一头牛....问农夫10年后有多少头牛,n年呢?
  7. *
  8. * @author liang
  9. */
  10. public class Cow {// 定义牛类
  11.         private int age = 0;// 定义牛的初始年龄

  12.         // 记录牛的年龄,每过一年,牛的年龄加1
  13.         public void addAge() {
  14.                 age++;
  15.         }

  16.         // 判断是否到了生育年龄
  17.         public boolean isCreatCow() {
  18.                 return (age >= 3) ? true : false;
  19.         }

  20.         public static void main(String[] args) {
  21.                 List<Cow> cowList = new ArrayList<Cow>();
  22.                 // 农夫原有的第一头牛
  23.                 cowList.add(new Cow());
  24.                 int yearCount;// 年份
  25.                 // 提示用户输入年份
  26.                 Scanner scanner = new Scanner(System.in);
  27.                 System.out.print("请您输入牛生长了多少年,输入后按回车可看到牛的数量奥:\n");
  28.                 yearCount = scanner.nextInt();// 输入年份
  29.                 for (int i = 1; i <= yearCount; i++) {// 根据输入的年份对牛进行循环计算,每过一年,牛的年龄都增加一岁
  30.                         int cowNum = cowList.size();// list中有多少行数据,就有几头牛,定义变量,取得list中的行数,即牛的数量
  31.                         for (int j = 0; j < cowNum; j++) {
  32.                                 Cow o = cowList.get(j);// 取出要进行生育的牛
  33.                                 // 每重复取到一头牛时,都意味着根据年份进行了一次新的循环,也就是又过了一年,所以每次新取出一头牛进行生育判断时,都要将这头牛的年龄加1
  34.                                 o.addAge();
  35.                                 // 对牛进行生育判断
  36.                                 if (o.isCreatCow()) {
  37.                                         // 如果这头牛到了生育年龄,就让牛生小牛
  38.                                         cowList.add(new Cow());
  39.                                 }
  40.                         }
  41.                 }
  42.                 System.out.println(yearCount + "年后将有<--" + cowList.size() + "-->头牛。");
  43.         }
  44. }
复制代码

评分

参与人数 1技术分 +4 收起 理由
田磊阳 + 4

查看全部评分

回复 使用道具 举报
答:农夫十年后将有28头牛
  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;

  5. /**
  6. * 问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以内年生出一头牛....问农夫10年后有多少头牛,n年呢?
  7. *
  8. * @author liang
  9. */
  10. public class Cow {// 定义牛类
  11.         private int age = 0;// 定义牛的初始年龄

  12.         // 记录牛的年龄,每过一年,牛的年龄加1
  13.         public void addAge() {
  14.                 age++;
  15.         }

  16.         // 判断是否到了生育年龄
  17.         public boolean isCreatCow() {
  18.                 return (age >= 3) ? true : false;
  19.         }

  20.         public static void main(String[] args) {
  21.                 List<Cow> cowList = new ArrayList<Cow>();
  22.                 // 农夫原有的第一头牛
  23.                 cowList.add(new Cow());
  24.                 int yearCount;// 年份
  25.                 // 提示用户输入年份
  26.                 Scanner scanner = new Scanner(System.in);
  27.                 System.out.print("请您输入牛生长了多少年,输入后按回车可看到牛的数量奥:\n");
  28.                 yearCount = scanner.nextInt();// 输入年份
  29.                 for (int i = 1; i <= yearCount; i++) {// 根据输入的年份对牛进行循环计算,每过一年,牛的年龄都增加一岁
  30.                         int cowNum = cowList.size();// list中有多少行数据,就有几头牛,定义变量,取得list中的行数,即牛的数量
  31.                         for (int j = 0; j < cowNum; j++) {
  32.                                 Cow o = cowList.get(j);// 取出要进行生育的牛
  33.                                 // 每重复取到一头牛时,都意味着根据年份进行了一次新的循环,也就是又过了一年,所以每次新取出一头牛进行生育判断时,都要将这头牛的年龄加1
  34.                                 o.addAge();
  35.                                 // 对牛进行生育判断
  36.                                 if (o.isCreatCow()) {
  37.                                         // 如果这头牛到了生育年龄,就让牛生小牛
  38.                                         cowList.add(new Cow());
  39.                                 }
  40.                         }
  41.                 }
  42.                 System.out.println(yearCount + "年后将有<--" + cowList.size() + "-->头牛。");
  43.         }
  44. }
复制代码

点评

回答正确  发表于 2013-4-14 20:01
回复 使用道具 举报
本帖最后由 董延京 于 2013-4-10 15:37 编辑
  1. public class Play07 {

  2.   /**
  3.    * @Author black horse
  4.    * 这个问题是斐波那契序列,我最初遇到的是一对小兔子三个月后又出生一对。
  5.    * 问题的关键在于:
  6.    * 当年分大于3后,当前年份的小牛数量:
  7.    * 是上一年的牛数量    加上    三年前的成牛的数量(它们在今年新生了小牛)。
  8.    * 当年分小于等于3,则只有这一头牛。
  9.    * 即 a(n)=a(n-1)+a(n-3);(n>3)
  10.    */
  11.   public static void main(String[] args) {
  12.     System.out.println(getNum(10));//执行结果为19。
  13.   }

  14.   public static int getNum(int n) {
  15.     //年份小于等于三年,返回1.
  16.     if (n <= 3) {
  17.       return 1;
  18.     }
  19.     //年份大于三年,返回a(n-1)+a(n-3)
  20.     else {
  21.       return getNum(n - 1) + getNum(n - 3);
  22.     }
  23.   }
  24. }
复制代码

点评

答案不正确··看看其他人,再来验证一遍  发表于 2013-4-14 20:51
和斐波那契序列问题差不多···可尝试完全面向对象的思路来解答  发表于 2013-4-14 20:02

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 将臣 于 2013-4-10 14:29 编辑
  1. import java.util.ArrayList;
  2. import java.util.List;


  3. public class Cattle {

  4.         //小牛的年龄
  5.         int age=0;
  6.         //是否能生小牛
  7.         public boolean isproduce(){
  8.                 if(age>=3){
  9.                         return true;
  10.                 }else{
  11.                         return false;
  12.                 }
  13.         }
  14.         //生出来的小牛三年后才能再生产,那么age每次加++
  15.         public void addYear(){
  16.                 age++;
  17.         }
  18.         public static void main(String[] args){
  19.                 //一共几年
  20.                 int year=10;
  21.                   List catList = new ArrayList();
  22.                    //农夫的第一头母牛
  23.                   catList.add(new Cattle());
  24.                    //开始计算
  25.                    for(int i=1;i<=year;i++){
  26.                     int calf = catList.size();
  27.                     for(int j = 0; j<calf; j++){
  28.                             Cattle cattle = (Cattle) catList.get(j);
  29.                      //计算年龄 ++一次
  30.                             cattle.addYear();
  31.                      //判断一下是否到了三年能下崽了
  32.                      if(cattle.isproduce()){
  33.                       catList.add(new Cattle());
  34.                      }
  35.                     }
  36.                    }
  37.                    System.out.println("农夫"+year+"年后将有"+catList.size()+"头牛。");
  38.                 }
  39.         }
复制代码

点评

回答正确  发表于 2013-4-14 20:53

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
  1. package demo;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * @author 郭利超
  6. *
  7. */
  8. public class Cow
  9. {

  10.         private int age = 0;
  11. /**
  12. * 是否可以生产小牛
  13. * @return True | False
  14. */
  15.         public boolean isCreatSmallCow()
  16.         {
  17.                 return (age >= 3)?true:false;
  18.         }

  19. /**
  20. * 过年了,年龄又大了一岁
  21. */
  22.         public void addYear()
  23.         {
  24.                 age++;
  25.         }
  26. /**
  27. * @param args
  28. */
  29.         public static void main(String[] args)
  30.         {
  31.            List<Cow> cowList = new ArrayList<Cow>();
  32.            //第一头小牛
  33.            cowList.add(new Cow());
  34.            int yearCount = 10;
  35.            //就这样一年年过
  36.            for(int i=1;i<=yearCount;i++)
  37.            {
  38.                         int rowNum = cowList.size();
  39.                         for(int j = 0; j<rowNum; j++)
  40.                         {
  41.                                 Cow o = cowList.get(j);
  42.                                 //过年了
  43.                                 o.addYear();
  44.                                 //能生小牛吗?
  45.                                 if(o.isCreatSmallCow())
  46.                                 {
  47.                                         cowList.add(new Cow());
  48.                                 }
  49.                         }
  50.                  }
  51.            System.out.println(yearCount+"年后将有【"+cowList.size()+"】头牛。");
  52.         }
  53. }
复制代码
10年后28头   N年后int yearCount = 10; 10改成N

评分

参与人数 1技术分 +4 收起 理由
田磊阳 + 4

查看全部评分

回复 使用道具 举报
  1. // 程序分析:牛的头数规律为1,1,2,3,5,8,13,21......
  2. public class niu{
  3. public static void main(String args[]){
  4. int n=0;
  5. math mymath = new math();//创建一个math实例对象

  6. System.out.println(mymath.f(n)); // 输出n年后的牛的头数,当n输入10.时,计算结果为55.
  7. }

  8. }
  9. class math
  10. {
  11. public int f(int x)
  12. {
  13. if(x==1 || x==2) //如果这头牛是出生的第一或第二年,
  14. return 1; //那么就返回牛数为1
  15. else
  16. return f(x-1)+f(x-2); 否则返回三年或以上的牛的头数
  17. }
  18. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
田磊阳 + 2

查看全部评分

回复 使用道具 举报
package test;
import java.util.*;
class  Test
{
        public static void main(String[] args)
        {
                //System.out.println("Hello World!");
                //获取用户输入的年数
                Scanner sc=new Scanner(System.in);
                int n=sc.nextInt();
                Niu(n);
        }
        public static void Niu(int n)
        {
                int f1=1,f2=1;
                if(n<3&&n>0)
                        System.out.println("第"+n+"年的牛的只数"+f2);
                else
                {
                        for(int x=3;x<=n;x++)
                        {
                                //定义一个临时变量
                                int f=f2;
                                f2=f1+f2;
                                f1=f;
                               
                                       
                               
                        }

                        System.out.println("第"+n+"年的牛的只数"+f2);
                }
        }
}

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报

RE: 【答题贴】01期----答题有奖

  1. /*
  2. 一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,
  3. 又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?(不考虑其他因素,只考虑此数学问题)
  4. */
  5. public class Cow
  6. {
  7.         static int count = 1;
  8.         static int n = 10;
  9.         private static void getCow(int year,int age)
  10.         {
  11.                 year++;
  12.                 age++;
  13.                 if(year<=n)
  14.                 {
  15.                         if(age>=3)
  16.                         {
  17.                                 //当牛的年龄达到3岁,则计数一次,代表一个小牛诞生。
  18.                                 count++;
  19.                                 //一个小牛诞生后,还会按照老牛的规律,三年后每年诞生一个新崽,所以还需要调用原来的方法
  20.                                 getCow(year,0);                       
  21.                         }
  22.                         getCow(year,age);
  23.                 }
  24.         }
  25.         public static void main(String[] args)
  26.         {
  27.                 new Cow().getCow(0, 0);
  28.                 System.out.println(count);
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +4 收起 理由
田磊阳 + 4

查看全部评分

回复 使用道具 举报
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Scanner;

  4. class Cattle {
  5.         private int year;// 年龄
  6.         private String name;// 姓名
  7.         private Cattle parentsCattle;// 生它的牛,牛对象Cattle
  8.         private List<Cattle> childCattle = new ArrayList<Cattle>();// 它生的牛,牛集合List<Cattle>
  9.         private int totalChildNumber;// 一共有多少个子女,子女数加上所有子女的子女数
  10.         private int birthYear;// 出生年龄

  11.         public Cattle() {
  12.                 this.year = 1;// 初始化时牛年龄为1
  13.                 this.birthYear = 1;
  14.         }

  15.         private void getChild(Cattle cattle) {
  16.                 if (cattle.getYear() > 3) {// 年龄大于3则生牛
  17.                         int year = cattle.getBirthYear() + 3;
  18.                         for (int i = cattle.getYear() - 3; i > 0; i--) {// 年龄大于3每年生一个牛,i设置递减形式,最大值i则是生的第一个牛的年龄,以此类推。
  19.                                 Cattle c = new Cattle();// 实例化第一个子牛
  20.                                 c.parentsCattle = cattle;// 设置生它的牛对象
  21.                                 c.setName(cattle.getName() + "~"
  22.                                                 + (cattle.childCattle.size() + 1));// 设置子牛的名字:父母牛的名字+第几个子女
  23.                                 c.setBirthYear(year++);// 设置第几年出生
  24.                                 c.setYear(i);// 设置子牛的年龄,按照年龄让它生牛,这里核心思想就是递归调用
  25.                                 c.setTotalChildNumber();// 设置子牛的子女数目
  26.                                 cattle.childCattle.add(c);// 将子牛添加到集合
  27.                         }
  28.                 }
  29.         }

  30.         public int getYear() {
  31.                 return year;
  32.         }

  33.         public void setYear(int year) {
  34.                 this.year = year;
  35.                 getChild(this);// 执行生牛的方法
  36.         }

  37.         public String getName() {
  38.                 return name;
  39.         }

  40.         public void setName(String name) {
  41.                 this.name = name;
  42.         }

  43.         public Cattle getParentsCattle() {
  44.                 return parentsCattle;
  45.         }

  46.         public void setParentsCattle(Cattle parentsCattle) {
  47.                 this.parentsCattle = parentsCattle;
  48.         }

  49.         public List<Cattle> getChildCattle() {
  50.                 return childCattle;
  51.         }

  52.         public void setChildCattle(List<Cattle> childCattle) {
  53.                 this.childCattle = childCattle;
  54.         }

  55.         public void setTotalChildNumber() {
  56.                 for (Cattle c : childCattle) {// 遍历它子女集合,将它每个子女的子女数相加
  57.                         this.totalChildNumber += c.getTotalChildNumber();
  58.                 }
  59.                 this.totalChildNumber += childCattle.size();// 累加上它的子女数,totalChildNumber此时代表子女数加上所有子女的子女数
  60.         }

  61.         public int getTotalChildNumber() {
  62.                 return totalChildNumber;
  63.         }

  64.         public int getBirthYear() {
  65.                 return birthYear;
  66.         }

  67.         public void setBirthYear(int birthYear) {
  68.                 this.birthYear = birthYear;
  69.         }

  70. }

  71. public class CattleTest {

  72.         public static void main(String[] args) {
  73.                 System.out.println("请输入年数:");
  74.                 Scanner sc = new Scanner(System.in);
  75.                 int year = sc.nextInt();
  76.                 int number = getTotalNumber(year);// 根据年数获得总牛数
  77.                 System.out.println(year + "年后,一共有" + number + "头牛");
  78.         }

  79.         public static int getTotalNumber(int year) {// 根据传递的参数year,返回总牛数
  80.                 Cattle cattle = new Cattle();
  81.                 cattle.setName("牛牛");
  82.                 cattle.setYear(year);// 设置年龄的时候执行了生牛方法
  83.                 cattle.setTotalChildNumber();
  84.                 printTotalNumber(cattle, 0);// 递归调用输出关系图
  85.                 return cattle.getTotalChildNumber() + 1;
  86.         }

  87.         public static void printTotalNumber(Cattle cattle, int livel) {// livel为目录级数
  88.                 StringBuilder sb = new StringBuilder("");
  89.                 for (int i = 0; i < livel; i++) {// 目录级数的前缀
  90.                         sb.append("|  ");
  91.                 }
  92.                 System.out.println(sb.toString() + "|-" + cattle.getName() + "(第"
  93.                                 + cattle.getBirthYear() + "年出生)");
  94.                 for (Cattle c : cattle.getChildCattle()) {
  95.                         printTotalNumber(c, livel + 1);
  96.                 }
  97.         }
  98. }
复制代码

评分

参与人数 1技术分 +4 收起 理由
田磊阳 + 4

查看全部评分

回复 使用道具 举报
import java.util.ArrayList;
import java.util.List;
/**
* @author songwentao
* 2009-12-03
*/
public class Cow {

private int age = 0;

/**
* 是否可以生产小牛
* @return True | False
*/
public boolean isCreatSmallCow(){
   return (age >= 3)?true:false;
}

/**
* 过年了,年龄又大了一岁
*/
public void addYear(){
   age++;
}
/**
* @param args
*/
public static void main(String[] args) {
   List<Cow> cowList = new ArrayList<Cow>();
   //第一头小牛
   cowList.add(new Cow());
   int yearCount = 10;
   //就这样一年年过
   for(int i=1;i<=yearCount;i++){
    int rowNum = cowList.size();
    for(int j = 0; j<rowNum; j++){
     Cow o = cowList.get(j);
     //过年了
     o.addYear();
     //能生小牛吗?
     if(o.isCreatSmallCow()){
      cowList.add(new Cow());
     }
    }
   }
   System.out.println(yearCount+"年后将有【"+cowList.size()+"】头牛。");
}
}

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
  1. /*  一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……
  2. *         问农夫10年后有多少头牛?n年呢?(不考虑其他因素,只考虑此数学问题)
  3. *
  4. *        思路:构建牛类,通过容器装载牛实例,遍历容器,判断是否可生育,添加牛实例,容器size即为牛的总数。
  5. */

  6. import java.util.ArrayList;

  7. //牛类
  8. class Cow
  9. {
  10.         //牛的年龄
  11.         private int age;
  12.         public Cow(int age)
  13.         {
  14.                 this.age = age;
  15.         }
  16.         //判断是否可生育,如果年龄不小于三,则为可生育的。
  17.         public boolean isFertile()
  18.         {
  19.                 if (age>=3)
  20.                         return true;
  21.                 else
  22.                         return false;
  23.         }
  24.         //年龄增长
  25.         public void grow()
  26.         {
  27.                 age++;
  28.         }
  29. }

  30. public class Test
  31. {
  32.         public static void main(String[] args)
  33.         {
  34.                 //要计算n年后的牛总数,将10替换即可
  35.                 getCows(10);
  36.                
  37.         }
  38.        
  39.         public static void getCows(int years)
  40.         {
  41.                
  42.                 //创建容器,存放Cow实例
  43.                 ArrayList<Cow> al = new ArrayList<Cow>();
  44.                 //存入第一只牛
  45.                 al.add(new Cow(0));
  46.                 for (int i=1; i<=years ; i++ )
  47.                 {
  48.                         //可生育牛的个数
  49.                         int fertileSum = 0;
  50.                         //遍历容器
  51.                         for(int j=0; j<al.size(); j++)
  52.                         {
  53.                                 Cow c = (Cow)al.get(j);
  54.                                 //牛年龄增加,后替换容器里的实例
  55.                                 c.grow();
  56.                                 al.set(j, c);
  57.                                 //判断是否可生育,记录可生育牛的总数
  58.                                 if (c.isFertile())
  59.                                 {
  60.                                         fertileSum++;
  61.                                 }
  62.                         }
  63.                         //new牛,并加到容器中,牛的初始年龄为0
  64.                         for (int k=1; k<=fertileSum ; k++ )
  65.                         {
  66.                                 al.add(new Cow(0));
  67.                         }
  68.                         //打印
  69.                         System.out.println("第"+i+"年牛的总数为:"+al.size());
  70.                 }
  71.         }
  72. }


  73. /*
  74.         输出:
  75.                 第1年牛的总数为:1
  76.                 第2年牛的总数为:1
  77.                 第3年牛的总数为:2
  78.                 第4年牛的总数为:3
  79.                 第5年牛的总数为:4
  80.                 第6年牛的总数为:6
  81.                 第7年牛的总数为:9
  82.                 第8年牛的总数为:13
  83.                 第9年牛的总数为:19
  84.                 第10年牛的总数为:28
  85. */
复制代码

评分

参与人数 1技术分 +4 收起 理由
田磊阳 + 4

查看全部评分

回复 使用道具 举报
呵呵呵

罗海云.zip

693 Bytes, 阅读权限: 100, 下载次数: 1

点评

递归思想。对  发表于 2013-4-14 21:23

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
package com.ccsu.xie.test;

import java.util.ArrayList;

public class Farm {
        // 存储农场种牛的信息
        ArrayList<Cow> cows = new ArrayList<Cow>();

        public Farm() {
                cows.add(new Cow(1, 1));
        }

        // n年之后农场牛的数量
        public int addCow(int year) {
                //保存新生牛的信息
                ArrayList<Cow> newCows = null;
                int count=cows.size();
                for (int i = 1; i <=year; i++) {
                       
                        newCows = new ArrayList<Cow>();
                        for (Cow cow : cows) {
                                if (cow.getAge()>=3){
                                        count++;
                                        newCows.add(cow.add(count));
                                }
                                cow.ageAdd();
                        }
                        //将新生牛信息加入cows中
                        cows.addAll(newCows);
                        System.out.println(i+" 年  农  场  信  息  ");
                        //输出每年农场中牛的信息
                        show();
                }
               
               
                return cows.size();
        }
       
        //输出信息
        public void show(){
                for(Cow cow : cows){
                        System.out.println(cow);
                }
        }
       
       
        public static void main(String[] args) {
       
                Farm farm = new Farm();
                System.out.println("总数量" + farm.addCow(10));
        }

       
}

// 牛
class Cow {
        private int id ;  //编号
        private int age;  //年龄
        Cow(int id, int age) {
                this.id = id;
                this.age = age;

        }

        public int getId() {
                return this.id;
        }

        public int getAge() {
                return this.age;
        }

        public void ageAdd() {
                this.age++;
        }

        public Cow add(int id) {
                return new Cow(id, 1);
        }
       
        public String toString(){
                return "id--->"+id+" age--->"+age;
        }
}

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
public class BullSum {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(getSum(10));
                System.out.println(getSum_1(10));
        }
        //思路是:3年后每头牛会每年生一头牛,新的牛3年后也会每年生一头牛。从第四年开始
        //第一头牛开始生小牛,以后每一年都开始生小牛,小牛三年后开始生小牛,即斐波拉契数列
        //年是n,总数即为 f(n)=f(n-1)+f(n-3)今年的牛总数为去年的总数加上三年前的总数。
        //使用递归算法,前3年每年总数都是1,第四年开始去年总数加上三年前的总数之和。
        public static int getSum(int year)
        {                                                               
                int sum=1;
                if(year==1)
                        return sum;
                if(year==2)
                        return sum;
                if(year==3)
                        return sum;
                return getSum(year-1)+getSum(year-3);
        }
        //用定义一个长度为3的数组,将前三年的总数存进去,数组里代表1、2、3年的总数
        //然后从第四年的总数为数组0角标和2角标之和即去年和三年前总数之和。
        //然后将数组中的数字向前挪一位,将第四年总数放进2角标里。这时数组里即为
        //2,3,4年的总数。继续for循环,获得以后每一年的总数。
        public static int getSum_1(int year)
        {
                int sum=1;
                int[] num={1,1,1};//
                if(year<4)
                        return sum;
                for(int x=4;x<=year;x++)
                {
                        sum=num[2]+num[0];
                        num[0]=num[1];
                        num[1]=num[2];
                        num[2]=sum;
                }       
                return sum;
        }
}

点评

答案有误  发表于 2013-4-14 21:05

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 蓝色骨头 于 2013-4-10 23:31 编辑

package heimatest;

import java.math.BigInteger;
import java.util.Arrays;
/*
* 思路:
* 动态规划思想
* 用cowSub(years)表示一头牛years年后将生多少牛。
* 那么cowSub(years) = (years-3) + cowSub(years-3) + cowSub(years-4) +……+ cowSub(0)
* 其中(years-3)表示这头牛生的牛的数量,当years < 3时cowSub(years)为0
* cowSub(years-3) + cowSub(years-4) +……+ cowSub(0)表示这头牛生的牛 再繁衍的牛的数量
* 那么如果有一头years年后的牛总数为:cowSub(years)+1,其中1为原来的这头牛
*
* 因为递归时会产生重复计算,
* 比如在计算cowSub(10)是要计算cowSub(4),在计算cowSub(7)时也要计算cowSub(4)
* 所以可以定义一个数组cowSub,cowSub表示一头牛i年后将生多少头牛。
* 如果没有计算过了就计算这个值,否则直接返回cowSub
*
* 当years比较大时int类型不够,使用BigInteger
*/
public class CowTest {
        public static int cow(int years){
               
                int[] cowSub = new int[years];        //创建数组,用于保留计算结果,避免重复计算,dp思想                        
        
                Arrays.fill(cowSub, -1);                //初始化为-1表示没有计算过
               
                return cowSub(cowSub, years) + 1;
        }
        private static int cowSub(int[] cowSub,int years){
               
                if( years < 3 ){
                        return 0;
                }
               
                int count =0;
                for(int i = 3; i <= years; i++){
                        count++;
                        if(cowSub[years-i] == -1){
                                cowSub[years-i] = cowSub(cowSub, years-i);                        
                        }
                        count += cowSub[years-i];
                }
               
                return count;
        }
        
        /*
         * 发现int长度不够,直接使用BigInteger
         */
        private static BigInteger one = new BigInteger("1");
        private static BigInteger nagtiveOne = new BigInteger("-1");
        public static BigInteger cow2(int years){
                BigInteger[] cowSub = new BigInteger[years];        //创建数组,用于保留计算结果,避免重复计算,dp思想                        
        
                Arrays.fill(cowSub, nagtiveOne);                //初始化为-1表示没有计算过
               
                return cowSub2(cowSub, years).add(one);
        }
        private static BigInteger cowSub2(BigInteger[] cowSub,int years){
               
                if( years < 3 ){
                        return new BigInteger("0");
                }
               
                BigInteger count = new BigInteger("0");
                for(int i = 3; i <= years; i++){
                        count = count.add(one);
                        if(cowSub[years-i].compareTo(nagtiveOne) == 0){
                                cowSub[years-i] = cowSub2(cowSub, years-i);                        
                        }
                        count = count.add(cowSub[years-i]);
                }
               
                return count;
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                for(int n =  0; n < 100; n++){
                        System.out.println(n+" year: "+cow(n)+" cows");
                }
               
                for(int n =  0; n < 100; n++){
                        System.out.println(n+" year: "+cow2(n)+" cows");
                }
        }

}

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
答案为28具体计算代码带啊如下
  1. package com.zknu.test;

  2. public class Cow {

  3.         public static void main(String[] args) {
  4.                
  5.                 //创建一个牛对象,初始年龄为0
  6.                 new Cow(0);
  7.                
  8.                 //输出打印出10年后的总牛数
  9.                 System.out.println(count);


  10.         }
  11.        
  12.         //创建一个int类型的变量,用于存放牛的总数,初始值为0
  13.         public static int count = 0;
  14.        
  15.         //对出生的牛进行处理
  16.         public Cow(int year){
  17.                
  18.                 count++;
  19.                
  20.                 //如果牛的年龄大于等于3,则每年年都产生一头新的牛
  21.                 for(int i=3+year;i<=10;i++){
  22.                         new Cow(i);
  23.                 }
  24.         }

  25. }
复制代码

点评

回答正确  发表于 2013-4-14 20:05

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
  1. /*
  2. 一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,
  3. 又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?

  4. 分析:
  5.         列出牛在每年的头数:1,1,2,3,5,8,13,21。。。发现从第三年开始当年牛数是前两年之和。
  6. */
  7. import java.lang.*;
  8. import java.io.*;
  9. public class shuniu {
  10.         public static void main(String[] args)throws IOException
  11.         {
  12.                 long t=1;//当年牛数
  13.                 int y=1;//当年时间,起始为第一年
  14.                 long f=1;//第一年牛数
  15.                 long s=1;//第二年牛数
  16.                 int ty=7;//总年份
  17.                 sop("请输入总年份");
  18.                 InputStream in=System.in;
  19.                 StringBuilder sb=new StringBuilder();  
  20.         while(true)  
  21.         {  
  22.             int ch=in.read();  
  23.             if(ch=='\r')  
  24.                 continue;  
  25.             if(ch=='\n')  
  26.             break;
  27.             sb.append((char)ch);  
  28.               
  29.         }
  30.                  ty=Integer.parseInt(sb.toString());
  31.                
  32.                
  33.                 while(y<=ty-2)
  34.                 {
  35.                         if(ty==1||ty==2)//如果是第一年或第二年直接返回一头牛
  36.                         {
  37.                                 s=1;
  38.                                 break;
  39.                         }
  40.                         t=f+s;//当年牛数=第一年+第二年
  41.                         f=s;
  42.                         s=t;
  43.                         y++;
  44.                 }
  45.                 sop(t);
  46.         }
  47.        
  48.         public static void sop(Object obj)
  49.         {
  50.                 System.out.println(obj);
  51.         }
  52.        

  53. }
复制代码

点评

答案有误  发表于 2013-4-14 21:24

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报
xyh19 高级黑马 2013-4-11 11:48:45
59#
本帖最后由 徐彦淏 于 2013-4-11 11:55 编辑

。。。。。。。。。。。。。。

Cow.zip

550 Bytes, 阅读权限: 100, 下载次数: 0

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

回复 使用道具 举报

RE: 【答题贴】01期----答题有奖

  1. /*
  2. 需求:求牛在某个月的数目!
  3. 分析:    月     数目
  4.                  1        1
  5.                  2                  1
  6.                  3        2
  7.                  4        3
  8.                  5        5
  9.                  6        8
  10.                  7        13
  11.                  ...      ...
  12. 由上可以看出x月的数目 是(x-1)月加上(x-2)月牛的数目
  13. .......
  14. */
  15. import java.util.*;   //导入包
  16. class CattleDemo {
  17.         public static void main(String[] args) {
  18.                 Scanner cn=new Scanner(System.in); //创建Scanner的对象 cn
  19.                 System.out.print("请输入要计算的月数:");
  20.                 int m =cn.nextInt();  // 定义一个变量 m  调用nexInt()方法  实现可以在Dos窗口中键盘输入我们要查询的月份
  21.                 int i=1;      //定义一个变量 i 表示 表示第几个月
  22.                 int[] arr=new int [m+1];   //创建一个数组  因为我们要查询的是m月  所以用m+1个数组元素就可以装下m个月的数
  23.                 for(i=1;i<m+1;i++) {
  24.                         if(i==1|i==2)
  25.                                 arr[1]=arr[2]=1;
  26.                         else       
  27.                                 arr[i]=arr[i-2]+arr[i-1];
  28.                 }
  29.                 System.out.println("第" + m +"月的牛数目为:" + arr[m]);
  30.         }   
  31. }
复制代码

点评

答案有误  发表于 2013-4-14 21:25

评分

参与人数 1技术分 +3 收起 理由
田磊阳 + 3

查看全部评分

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