練習(xí)一
有一對兔子帮毁,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子吉拳,假如兔子都不死质帅,問第n個月的兔子對數(shù)為多少?
?請定義方法實現(xiàn)該功能留攒,第n個月由方法的調(diào)用者傳入煤惩,返回該月的兔子對數(shù)。調(diào)用方法查看結(jié)果炼邀。
分析:第n個月出生的兔子在n+2個月開始生育魄揉,那么第n+2個月的兔子總數(shù)為第n天兔子總數(shù)(n+2天新出生的兔子數(shù)量)和第n+1兔子總數(shù)(n+2天非新生兔子的數(shù)量)天的和。得到遞推公式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()));//方法二 ? ?
} ??
?//方法一:循環(huán)+數(shù)組 ? ??
?? public static ?int rabbit(int month){ ??
? ?? int[] numList=new int[month];//創(chuàng)建月份長度的數(shù)組拭宁,充當(dāng)數(shù)列 ? ? ? ?
numList[0]=numList[1]=1;//前兩項值已知 ? ? ? ??
?? for (int i = 2; i < numList.length; i++) { ? ? ?
? ? ? ? ? numList[i]=numList[i-1]+numList[i-2];//依次求下一月的數(shù)量 ? ??
? ? ?? } ? ? ? ??
?? return numList[month-1];//輸出末項值 ? ??
?? }
//方法二:遞歸
public static int count(int n){ ? ?
if (n==1||n==2){ ? ?
? ? return 1;//前兩項值賦值?
?? } ? ?
return count(n-1)+count(n-2);//遞推公式會反復(fù)調(diào)用count直到n-2=1時}
}
練習(xí)二
?我國古代數(shù)學(xué)家張丘建在《算經(jīng)》一書中提出的數(shù)學(xué)問題:雞翁一值錢五洛退,雞母一值錢三瓣俯,雞雛三值錢一。? 百錢買百雞兵怯,問雞翁彩匕、雞母、雞雛各幾何摇零?
分析:看到題之后懵了好久推掸,因為正常人來做這道題肯定是解方程組x+y+z=100&&5x+3y+1/3z==100,但我完全想不出來怎么編程解決驻仅。
后來想到可以挨個試谅畅,于是寫出了三層循環(huán)挨個試三種雞的個數(shù),滿足條件再輸出噪服,這個方法速 度偏慢毡泻,于是簡化方程為 14x+8y=200&&z=100-x-y,兩層循環(huán)先求出xy
public class Test411 {
? ? public static void main(String[] args) { ?
? ? ? chikenNum(); ??
?}
public static void chikenNum(){ ?
?a:???for (int cock=1;cock<20;cock++){//第一層循環(huán),挨個試x ? ?
? ? for ( int len=1;len<34;len++){//第二層循環(huán)挨個試y ? ??
? ? ? ? ?? if (14*cock+8*len==200){//滿足條件輸出 ? ? ? ? ? ? ?
? ? ? System.out.println("雞翁:"+cock); ? ? ?
? ? ? ? ? ? ? System.out.println("雞母:"+len); ? ? ??
? ? ? ? ? ?? System.out.println("雞雛:"+(100-cock-len));
break; ? ??
? ? ?? } ? ??
?? }
? ? }
}
}