java程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?用程序这么来表达!(优先考虑if语句)...
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
用程序这么来表达!(优先考虑if语句) 展开
用程序这么来表达!(优先考虑if语句) 展开
5个回答
推荐于2018-04-11
展开全部
public class Test {//用递归法计算兔子的规律
static long fib(int x){
if(x>2) return (fib(x-1)+fib(x-2));
else return 1;
}
public static void main(String[] args) {
for(int i=1;i<=24;i++){
long n=fib(i);
//算出的是对数.要算总数的法,*2就行
System.out.println("第"+i+"个月有兔子对数为"+n);
}
}
}
static long fib(int x){
if(x>2) return (fib(x-1)+fib(x-2));
else return 1;
}
public static void main(String[] args) {
for(int i=1;i<=24;i++){
long n=fib(i);
//算出的是对数.要算总数的法,*2就行
System.out.println("第"+i+"个月有兔子对数为"+n);
}
}
}
2013-07-01
展开全部
这是数学界很有名的一个数列,它的通项为:
a1=1;
a2=1;
an=a(n-1)+a(n-2);其中,n的表达式都代表下标;
我没学过JAVA,用C写一个,作为参考吧:
main()
{long f[41];<br/>int i,p=0;<br/>f[1]=1;f[2]=1;<br/>for(i=3;i<41;i++)<br/>f[i]=f[i-1]+f[i-2];<br/>for(i=1;i<41;i++)<br/>{printf("%12ld",f[i]);<br/>p++;<br/>if(p%4==0)<br/>printf("\n");}}
调试过了,没问题.呵呵.
a1=1;
a2=1;
an=a(n-1)+a(n-2);其中,n的表达式都代表下标;
我没学过JAVA,用C写一个,作为参考吧:
main()
{long f[41];<br/>int i,p=0;<br/>f[1]=1;f[2]=1;<br/>for(i=3;i<41;i++)<br/>f[i]=f[i-1]+f[i-2];<br/>for(i=1;i<41;i++)<br/>{printf("%12ld",f[i]);<br/>p++;<br/>if(p%4==0)<br/>printf("\n");}}
调试过了,没问题.呵呵.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-01
展开全部
package com.efreda.sweet;
import java.util.*;
/**
*
* @author Sweet
* @discribtion 一个实例代表一对兔子,这里没有考虑兔子的死亡
*/
public class Rabbit {
private int bornMonth;//生产间隔
private int grow;//成长月数
private boolean isParent;//是否是父兔子
public Rabbit(int bornMonth,boolean isParent){
this.bornMonth=bornMonth;
this.grow=0;
this.isParent=isParent;
}
public void addGrow(){
this.grow++;
}
public boolean isBorn(int month){
if(this.isParent){
if(month%this.bornMonth==0){
return true;
}else{
return false;
}
}else{
if((month%this.bornMonth==0)&&(this.grow>3)){
return true;
}else{
return false;
}
}
}
public static void main(String args[]){
ArrayList<Rabbit> array=new ArrayList<Rabbit>();
Rabbit parent=new Rabbit(1,true);/*实例化第一对父兔子,根据条件,他们的生产间隔为一个月*/
array.add(parent);
for(int i=1;i<=12;i++){//循环12个月
//首先让每一只兔子的成长度加1
for(int j=0;j<array.size();j++){
array.get(j).addGrow();
}
//然后判断兔子是否生产
for(int j=0;j<array.size();j++){
if(array.get(j).isBorn(i)){
Rabbit child=new Rabbit(3,false);/*这里产生的兔子都是子兔子了*/
array.add(child);
}
}
}
System.out.print(array.size()*2);/*打印出兔子的只数,因为一个实例是2只兔子,所以这里乘以2*/
}
}
不用类的话,你直接把类中计算它是否出生的方法放到For循环里去就行了,添加一个变量来保存当前兔子的对数(我用的是类的实例来计算兔子对数嘛)。还有个问题,你说的是出生的兔子三个月后可以生产了是包括了第三个月还是从第四个月开始计算,如果包括第三个月的话,就需要把grow>3改为grow>=3,如果到了第三个月还不能生产,也就是说一对新兔子从诞生到它们在生产需要六个月时间的话,就把grow>3改为grow>=6.
import java.util.*;
/**
*
* @author Sweet
* @discribtion 一个实例代表一对兔子,这里没有考虑兔子的死亡
*/
public class Rabbit {
private int bornMonth;//生产间隔
private int grow;//成长月数
private boolean isParent;//是否是父兔子
public Rabbit(int bornMonth,boolean isParent){
this.bornMonth=bornMonth;
this.grow=0;
this.isParent=isParent;
}
public void addGrow(){
this.grow++;
}
public boolean isBorn(int month){
if(this.isParent){
if(month%this.bornMonth==0){
return true;
}else{
return false;
}
}else{
if((month%this.bornMonth==0)&&(this.grow>3)){
return true;
}else{
return false;
}
}
}
public static void main(String args[]){
ArrayList<Rabbit> array=new ArrayList<Rabbit>();
Rabbit parent=new Rabbit(1,true);/*实例化第一对父兔子,根据条件,他们的生产间隔为一个月*/
array.add(parent);
for(int i=1;i<=12;i++){//循环12个月
//首先让每一只兔子的成长度加1
for(int j=0;j<array.size();j++){
array.get(j).addGrow();
}
//然后判断兔子是否生产
for(int j=0;j<array.size();j++){
if(array.get(j).isBorn(i)){
Rabbit child=new Rabbit(3,false);/*这里产生的兔子都是子兔子了*/
array.add(child);
}
}
}
System.out.print(array.size()*2);/*打印出兔子的只数,因为一个实例是2只兔子,所以这里乘以2*/
}
}
不用类的话,你直接把类中计算它是否出生的方法放到For循环里去就行了,添加一个变量来保存当前兔子的对数(我用的是类的实例来计算兔子对数嘛)。还有个问题,你说的是出生的兔子三个月后可以生产了是包括了第三个月还是从第四个月开始计算,如果包括第三个月的话,就需要把grow>3改为grow>=3,如果到了第三个月还不能生产,也就是说一对新兔子从诞生到它们在生产需要六个月时间的话,就把grow>3改为grow>=6.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是数学界很有名的一个数列,它的通项为:
a1=1;
a2=1;
an=a(n-1)+a(n-2);其中,n的表达式都代表下标;
我没学过JAVA,用C写一个,作为参考吧:
main()
{long
f[41];<br/>int
i,p=0;<br/>f[1]=1;f[2]=1;<br/>for(i=3;i<41;i++)<br/>f[i]=f[i-1]+f[i-2];<br/>for(i=1;i<41;i++)<br/>{printf("%12ld",f[i]);<br/>p++;<br/>if(p%4==0)<br/>printf("\n");}}
调试过了,没问题.呵呵.
a1=1;
a2=1;
an=a(n-1)+a(n-2);其中,n的表达式都代表下标;
我没学过JAVA,用C写一个,作为参考吧:
main()
{long
f[41];<br/>int
i,p=0;<br/>f[1]=1;f[2]=1;<br/>for(i=3;i<41;i++)<br/>f[i]=f[i-1]+f[i-2];<br/>for(i=1;i<41;i++)<br/>{printf("%12ld",f[i]);<br/>p++;<br/>if(p%4==0)<br/>printf("\n");}}
调试过了,没问题.呵呵.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public
class
Test
{//用递归法计算兔子的规律
static
long
fib(int
x){
if(x>2)
return
(fib(x-1)+fib(x-2));
else
return
1;
}
public
static
void
main(String[]
args)
{
for(int
i=1;i<=24;i++){
long
n=fib(i);
//算出的是对数.要算总数的法,*2就行
System.out.println("第"+i+"个月有兔子对数为"+n);
}
}
}
class
Test
{//用递归法计算兔子的规律
static
long
fib(int
x){
if(x>2)
return
(fib(x-1)+fib(x-2));
else
return
1;
}
public
static
void
main(String[]
args)
{
for(int
i=1;i<=24;i++){
long
n=fib(i);
//算出的是对数.要算总数的法,*2就行
System.out.println("第"+i+"个月有兔子对数为"+n);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询