【从零开始学Java】学习笔记day011练习

练习一

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?

 请定义方法实现该功能,第n个月由方法的调用者传入,返回该月的兔子对数。调用方法查看结果。

分析:第n个月出生的兔子在n+2个月开始生育,那么第n+2个月的兔子总数为第n天兔子总数(n+2天新出生的兔子数量)和第n+1兔子总数(n+2天非新生兔子的数量)天的和。得到递推公式num(n)=num(n-1)+num(n-1);num(1)=num(2)=1用递推公式和前两项求末项

import java.util.Scanner;

public class Test411 { 

   public static void main(String[] args) {   

     Scanner sc=new Scanner(System.in);      

  System.out.println(rabbit(sc.nextInt()));//方法一       

 System.out.println(count(sc.nextInt()));//方法二    

}   

 //方法一:循环+数组     

   public static  int rabbit(int month){   

     int[] numList=new int[month];//创建月份长度的数组,充当数列        

numList[0]=numList[1]=1;//两项值已知         

   for (int i = 2; i < numList.length; i++) {      

          numList[i]=numList[i-1]+numList[i-2];//依次求下一月的数量     

       }         

   return numList[month-1];//输出末项值     

   }

//方法二:递归

public static int count(int n){    

if (n==1||n==2){    

    return 1;//前两项值赋值 

   }    

return count(n-1)+count(n-2);//递推公式会反复调用count直到n-2=1}

}

练习二

 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。​ 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

分析:看到题之后懵了好久,因为正常人来做这道题肯定是解方程组x+y+z=100&&5x+3y+1/3z==100,但我完全想不出来怎么编程解决。

后来想到可以挨个试,于是写出了三层循环挨个试三种鸡的个数,满足条件再输出,这个方法速 度偏慢,于是简化方程为 14x+8y=200&&z=100-x-y,两层循环先求出xy


public class Test411 {

    public static void main(String[] args) {  

      chikenNum();   

 }

public static void chikenNum(){  

 a:   for (int cock=1;cock<20;cock++){//第一层循环,挨个试x    

    for ( int len=1;len<34;len++){//第二层循环挨个试y     

           if (14*cock+8*len==200){//满足条件输出              

      System.out.println("鸡翁:"+cock);      

              System.out.println("鸡母:"+len);       

             System.out.println("鸡雏:"+(100-cock-len));

break;     

       }     

   }

    }

}

}

你可能感兴趣的:(【从零开始学Java】学习笔记day011练习)