黑马程序员技术交流社区

标题: java经典题求解 [打印本页]

作者: ╄Tracyぺ    时间: 2014-7-11 22:29
标题: java经典题求解
本帖最后由 ╄Tracyぺ 于 2014-7-15 23:52 编辑

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
作者: zhaoalei    时间: 2014-7-11 22:44
//这是一个菲波拉契数列问题
作者: So丶執念    时间: 2014-7-11 22:46
:lol度娘告诉你~~
作者: zhaoalei    时间: 2014-7-11 22:50
   public class lianxi01{   public static void main (String args[])   {   System.out.println("第一个月的兔子对数:1");   System.out.println("第二个月的兔子对数:1");   int f1=1,f2=1,f,m=24;   for (int i=3;i<=m;i++){  f=f2; f2=f1+f2; f1=f;  System.out.println("第"+i+"个月的兔子对数:"+f2)} }  }
作者: zippo    时间: 2014-7-11 23:21
class Demo1
{
        public static void main(String[] args)
        {
                int month = -1;                                                                //定义一个变量month来存储月份
                System.out.println("兔子的总数为"+rabbit(month));
        }
        public static long rabbit(int month){                //计算兔子总数的函数
                if (month>=0)
                {
                                switch (month)                                                //switch判断month,因为month是在整型,有具体的值。用swtich比较方便。
                        {
                        case 0 :
                                return 0;                                                               
                        case 1 :
                                return 1;
                        default :
                                return rabbit(month - 1)+rabbit(month -2);
                        }
                }else{
                        System.out.println("输入错误啊。");
                        return 0;
                }
        }
}

作者: ╄Tracyぺ    时间: 2014-7-12 22:38
zippo 发表于 2014-7-11 23:21
class Demo1
{
        public static void main(String[] args)

兔子的规律为数列为什么是1,1,2,3,5,8,13,21....
作者: 玉遥    时间: 2014-7-12 22:55
这个用递归最好:
   规律是第三个月以后当前月的对数是前两个月对数的和。
方式1:for循环方式

  1. <P>class Tu{
  2.         public static void main(String[] args){
  3.                 System.out.println(tu(12));//计算12个月的对数
  4.         }
  5.         public static int tu(int n){
  6.                  int x=1;//第一个月的对数
  7.                  int y=1; //第二个月的对数
  8.                  int sum=0;//记录n个月的对数
  9.                  int z;//中转变量

  10.        for (int i = 3; i <= n; i++) {
  11.        sum=x+y;//假设求第三个月的对数,就是第一个月加第二个月
  12.        z=y;//当求第四个月对数时,就是sum+第二个月对数也就是y,先用z记录现在的y
  13.        y=sum;//再将第三个月的对数赋值给y
  14.        x=z; //再将z记录的y赋值给x,现在的x就相当于第二个月的对数,依次推下去就是
  15.        } </P>
  16. <P>       return sum;</P>
  17. <P>}</P>
复制代码
方式2:递归方式,更简单

  1. <P>           int sum=0;</P>
  2. <P>           if (n==1) {
  3.                   return 1;//第一个月的对数
  4.            }else if (n==2) {
  5.                   return 1;//第二个月的对数
  6.            }else{
  7.                   sum=tu(n-1)+tu(n-2);//从第三个月开始是前两个月对数的和
  8.            }
  9.            return sum;
  10.     }
  11. }</P>
复制代码

看看,看得懂吗?

         

作者: ╄Tracyぺ    时间: 2014-7-12 23:16
╄Tracyぺ 发表于 2014-7-12 22:38
兔子的规律为数列为什么是1,1,2,3,5,8,13,21....

懂了~三克油
作者: ╄Tracyぺ    时间: 2014-7-15 00:03
玉遥 发表于 2014-7-12 22:55
这个用递归最好:
   规律是第三个月以后当前月的对数是前两个月对数的和。
方式1:for循环方式方式2:递归 ...

嗯,可以的
作者: ╄Tracyぺ    时间: 2014-7-15 00:13
玉遥 发表于 2014-7-12 22:55
这个用递归最好:
   规律是第三个月以后当前月的对数是前两个月对数的和。
方式1:for循环方式方式2:递归 ...

怎么让我提高技术分呀
作者: nsunshine    时间: 2014-7-15 00:24
斐波那契数列,和C语言的编程都差不多
作者: .Mч┞尛__洋    时间: 2014-7-15 07:45
ACM做过这题 !!
作者: MissBear    时间: 2014-7-15 11:32
学习了,学习了
作者: zippo    时间: 2014-7-17 23:16
╄Tracyぺ 发表于 2014-7-12 22:38
兔子的规律为数列为什么是1,1,2,3,5,8,13,21....

可以推测,第一个月是一对,第二个月也是一对,第三个月也是生了一对的话就是两队了,然后第四个月又生一对就是3对了,可以这样一直推下去,这是著名的斐波那契数列
作者: xwh1230    时间: 2014-7-17 23:50
本帖最后由 xwh1230 于 2014-7-17 23:53 编辑

                月份   兔子个数                                                1        1                             
                3        2            
                6        4               
                9        8               
                12        16
import java.lang.Math; class  Demo4 {     
    public static void main(String[] args)          {                  
                               int i = 10;       //假设是10个月,也可以随意输入一个数     
                               int sum = (int)Math.pow(2,i/3);        //sum就是兔子的总数
                               System.out.println(sum);         }
    }




作者: ws484664    时间: 2014-7-17 23:56
看看                                




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