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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 田磊阳 于 2013-4-14 21:36 编辑

[fly]此贴为答题贴,原题地址如下[/fly]



【让技术飞】01期----答题有奖
http://bbs.itheima.com/thread-44933-1-1.html

90 个回复

倒序浏览
沙发沙发,顶起!
回复 使用道具 举报
本帖最后由 丘凤光 于 2013-4-10 00:20 编辑

答案要写在这啊,嘿嘿,练过类似的题,有优势{:soso_e144:}
  1. /*
  2. 需求:一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?

  3. 思路:

  4. */
  5. public class Cow
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 sop("第1年牛的头数:1");
  10.                 sop("第2年牛的头数:1");
  11.                 sop("第10年牛的头数:"+cowToCow(10));
  12.                
  13.         }

  14.         //n年后牛的头数
  15.         public static int cowToCow(int year)
  16.         {
  17.                 int f1 = 1;        //第一年牛的头数
  18.                 int f2 = 1;        //第二年牛的头数
  19.                 int f; //随时间变化的牛的头数
  20.                 for(int i=3; i<=year; i++)
  21.                 {
  22.                         //三年之后每年的牛都是去年和前年的牛的和
  23.                         f = f2;
  24.                         f2 = f1 + f2;
  25.                         f1 = f;
  26.                 }
  27.                 return f2;
  28.         }

  29.         //打印
  30.         public static void sop(Object obj)
  31.         {
  32.                 System.out.println(obj);
  33.         }
  34. }
复制代码

评分

参与人数 2技术分 +3 黑马币 +1 收起 理由
杜鹏飞 + 1 代码写错了,这个不是斐波那契数列.
田磊阳 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 zjm10zj 于 2013-4-10 00:42 编辑

package demo1;

import java.util.ArrayList;
import java.util.List;

public class Cow {

private int age = 0;

public boolean isCreatSmallCow(){
   return (age >= 3)?true:false;
}
public void addYear(){
   age++;
}
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. public static void main(String[] args)
  2.         {
  3.                 int num=bullCount(10);
  4.                 System.out.println(num);
  5.         }
  6.         public static int bullCount(int year)
  7.         {
  8.                 int bull=1;//初始一头牛
  9.                 for (int x=year-3;x>=0;x--)//这头牛三年后增加一头,之后每年增一头
  10.                 {
  11.                         bull+=bullCount(x);//递归调用
  12.                 }
  13.                 return bull;
  14.         }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
package cn.mathMethod;
/*
* 牛的规律为数列1,1,2,3,5,8,13,21....  
*
*/
public class fabonach {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int n = 8;
                int sum = add(n);
                System.out.println(sum);
        }
        private static int add(int n) {
                if(n<=0) return 0;
               
                //小于三年就只有一头牛
                if(n<3 & 0<n)
                        return 1;
               
                int sums = 0;
                //新增的牛为以前的牛每个月所产牛
                sums+= add(n-1)+add(n-2);
                return sums;
        }
       
       

}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 lyg2013 于 2013-4-10 00:28 编辑
  1. package test;
  2. public class cow {
  3.         public static void main(String[] args) {
  4.                 new cow(0);
  5.                 System.out.println("农夫10年后有"+count+"头牛");
  6.         }
  7.   public static int count = 0;
  8.   public cow( int year){
  9.      count++;
  10.         for(int i=3+year;i<=10;i++){ //由于3岁以上的牛才可以产子,所以i的初始值是3+year
  11.            new cow(i);
  12.         }
  13.          
  14.         }

  15. }
复制代码
n年后把i<=10,改成i<=n.农夫养的第一头牛是在构造方法中的count++语句产生的,每次循环都用到一个递归调用。

评分

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

查看全部评分

回复 使用道具 举报
这是我以前写的关于兔子的同类题
回复 使用道具 举报
shenshuangxi 发表于 2013-4-10 00:25
package cn.mathMethod;
/*
* 牛的规律为数列1,1,2,3,5,8,13,21....  

这是我以前写的关于兔子的同类题
回复 使用道具 举报
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. /**
  4. * 一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后, 又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?
  5. */
  6. public class CreatCow {
  7.         private int age;// 年数
  8.         // 生成小牛
  9.         public boolean isCreatCow() {
  10.                 return (age >= 3) ? true : false;
  11.         }
  12.         // age加1
  13.         public void addYear() {
  14.                 age++;
  15.         }
  16.         public static void main(String[] args) {
  17.                 List<CreatCow> cowList = new ArrayList<CreatCow>();
  18.                 // first cow
  19.                 cowList.add(new CreatCow());
  20.                 int year = 10;// year = n;
  21.                 for (int i = 0; i < year; i++) {
  22.                         for (int j = 0; j < cowList.size(); j++) {
  23.                                 CreatCow cc = cowList.get(j);
  24.                                 cc.addYear();
  25.                                 // 3 年到了,是否可以生成小牛
  26.                                 if (cc.isCreatCow()) {
  27.                                         cowList.add(new CreatCow());
  28.                                 }
  29.                         }
  30.                 }
  31.                 System.out.println(year + "年之后将有" + cowList.size() + "头牛");// 10 年之后28头
  32.         }
  33. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
顶顶顶顶顶
回复 使用道具 举报
本帖最后由 葛迅 于 2013-4-10 00:44 编辑
  1.        
  2. public class Cow
  3. {
  4.         static int count = 1;
  5.         private static void feedCow(int year,int age)
  6.         {
  7.                 year++;
  8.                 age++;
  9.                 if(year<=10)
  10.                 {
  11.                         if(age>=3)
  12.                         {
  13.                                 count++;
  14.                                 feedCow(year,0);
  15.                         }
  16.                         feedCow(year,age);
  17.                 }
  18.         }

  19.         public static void main(String[] args)
  20.         {
  21.                 new ClassFive().feedCow(0, 0);
  22.                 System.out.println(count);
  23.         }
  24. }
  25.        
复制代码
n年后,将year<= 10 改成 year <= n.即可。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 HM许涛 于 2013-4-10 00:37 编辑

/*题目:一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛……
问农夫10年后有多少头牛?n年呢?(不考虑其他因素,只考虑此数学问题)
解题理论依据:X(n)=X(n-1)+X(n-2),从第三项开始,后一项为前两项的数值和。斐波那契数列公式(括号内为年数,n>=3)*/
public class  Sum
{
        public static void main(String[] args)
        {
                System.out.println("第1年牛的数量:1");//第一年数量不变。
                System.out.println("第2年牛的数量:1");//第二年数量不变。
                int x1=1,x2=1,x,n=10;//给n赋值10,求第十年牛的数量。
                for(int y=3;y<=n;y++)//循环累加求出n年时牛的数量。从数量变化的年份开始。
                {
                        x=x2;
                        x2=x1+x2;//累加循环体,相加后赋值的x2为所求的值。
                        x1=x;
                        System.out.println("第"+y+"年牛的数量"+x2);
                }
        }
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 王海龙2013 于 2013-4-10 00:49 编辑

Demo.zip (839 Bytes, 下载次数: 3)

点评

运用了面向对象,里面的一条注释“//能生小牛吗?”很搞笑,哈哈  发表于 2013-4-14 20:18

评分

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

查看全部评分

回复 使用道具 举报
import java.util.Scanner;

public class Cattle {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
        int n = new Scanner(System.in).nextInt(); //输入要计算多少年后牛的个数;
        if(n<0)
                System.out.print("输入不正确,请重新输入!");
        else if(n<3)
                System.out.print(n+"年后牛的数量:"+1);
        else
            System.out.print(n+"年后牛的数量:"+(2<<(n/3-1)));//输出n年后牛的个数;
        }

}

评分

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

查看全部评分

回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 神牛
  6. {
  7.     class Program
  8.     {
  9.         //用来统计过year年后,牛的数量
  10.         public static int CowNmuber(int year)
  11.         {
  12.             int sum = 0;           
  13.             //1到6年时,牛的数目统计比较简单,则简单处理
  14.             if (year < 7)
  15.             {
  16.                 switch (year)
  17.                 {
  18.                     case 0:
  19.                     case 1:
  20.                     case 2:
  21.                     case 3:
  22.                         sum = 1;
  23.                         break;
  24.                     case 4:
  25.                         sum = 2;
  26.                         break;
  27.                     case 5:
  28.                         sum = 3;
  29.                         break;
  30.                     case 6:
  31.                         sum = 4;
  32.                         break;
  33.                     default:
  34.                         break;
  35.                 }
  36.             }
  37.             else
  38.             {
  39.                 //第7年开始,牛的数目呈现有规律的增长,则使用循环累加
  40.                 //具体规律为第7增加1头,第8年增加两头,第9年增加3头,如此类推……
  41.                 sum = 4;//第6年的时候已经有4头牛了
  42.                 for (int i = 7; i <= year; i++)
  43.                 {
  44.                     sum = sum + (i - 6);
  45.                 }
  46.             }                     
  47.             return sum;
  48.         }
  49.         static void Main(string[] args)
  50.         {
  51.             int n;
  52.             Console.Write("输入n:");
  53.             n =int.Parse(Console.ReadLine());
  54.             Console.WriteLine("{0}年后,农夫家有{1}头牛", n, CowNmuber(n));
  55.             Console.ReadKey();
  56.         }
  57.     }
  58. }
复制代码

点评

额,用C#写的,我又补了一下C#的相关知识,才编译通过的  发表于 2013-4-14 20:24

评分

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

查看全部评分

回复 使用道具 举报
{:soso_e199:}

New2.zip

469 Bytes, 下载次数: 168

点评

继续努力  发表于 2013-4-14 20:26
结果是正确的,但是代码缺少扩展性·····  发表于 2013-4-14 20:26

评分

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

查看全部评分

回复 使用道具 举报
import java.util.Scanner;

public class Cattle {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
        int n = new Scanner(System.in).nextInt(); //输入要计算多少年后牛的个数;
        if(n<0)
                System.out.print("输入不正确,请重新输入!");
        //else if(n<3)
                //System.out.print(n+"年后牛的数量:"+1);//
        else
            System.out.print(n+"年后牛的数量:"+(1<<(n/3)));//输出n年后牛的个数;
        }

}

点评

做的不对哦  发表于 2013-4-14 20:27
回复 使用道具 举报
Asan 中级黑马 2013-4-10 01:15:30
19#
  1. package cn.learn.test;

  2. public class Test {

  3.         public static int count = 0;  // 初始化牛开始为0头
  4.         public static int n = 10;     // 初始化一共多少年,可以写的深一点可以写成用户输入年数

  5.         // 构造方法
  6.         public Test(int year) {
  7.                 // 每调用一次构造方法,牛的数量 +1;
  8.                 count++;
  9.                 // 每四年调用一次Test()方法
  10.                 for (int i = 3 + year; i <= n; i++) {
  11.                         new Test(i);
  12.                 }
  13.         }

  14.         public static void main(String[] args) {
  15.                 // 调用构造方法并初始化从0开始
  16.                 new Test(0);
  17.                 // 打印 n+" 年之后一共有  "+count+" 头牛"
  18.                 System.out.println(n + " 年之后一共有  " + count + " 头牛");
  19.         }
  20. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
  1. import java.util.Scanner;//引入扫描类
  2. class  Cow
  3. {
  4.         public static int count=0;//全局共享计数变量

  5.         public Cow(int year,int m)//year:当前年数 m:要计算的截止年数
  6.         {
  7.                 count++;//+1头
  8.                
  9.                 for(int i=3+year;i<=m;i++)
  10.                 {
  11.                         new Cow(i,m);//递归创建牛对象
  12.                 }
  13.         }
  14.         public static void main(String[] args)
  15.         {
  16.                 System.out.println("一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,"+
  17.                         "生出来的牛三年后,又可以每年生出一头牛……"+"\n要计算n年后有多少头,");

  18.                 int temp=0;

  19.                 while(temp>=0)//循环输入,当输入-1时跳出输入循环
  20.                 {
  21.                         System.out.println("请输入数字按(enter结束输入),当输入-1的时候退出程序:");

  22.                         temp=new Scanner(System.in).nextInt();/*用输入对象System.in初始化创建扫描类对象,并调用
  23.                                                                                                         该对象读取方法读取扫描流的一个数据存入截止年份变量temp中
  24.                                                                                                         */

  25.                         if(temp==-1)//当输入-1的时候跳出输入循环的判断
  26.                                 break;

  27.                         new Cow(0,temp);//创建一头牛对象,初始年份为0,计算截止年份为temp
  28.                         System.out.println(temp+"年后共有"+count+"头牛");

  29.                         count=0;//计数清0
  30.                 }
  31.                 System.out.println("谢谢使用,再见!");
  32.         }
  33. }
复制代码

QQ截图20130410013524.png (8.91 KB, 下载次数: 46)

QQ截图20130410013524.png

评分

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

查看全部评分

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