黑马程序员技术交流社区
标题: 用for循环写兔子生兔子问题 [打印本页]
作者: 北极£莜蓝 时间: 2014-5-30 23:42
标题: 用for循环写兔子生兔子问题
:P题目如下:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
作者: yang1352546 时间: 2014-5-30 23:50
本帖最后由 yang1352546 于 2014-5-30 23:55 编辑
有一个规律就是 这个月的兔子数 = 上个月的兔子数 + 上上个月的兔子数;
public class Demo {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数: 1");
System.out.println("第2个月的兔子对数: 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);
}
作者: felixzr 时间: 2014-5-31 01:00
class Demo
{
public static void main(String[] args)
{
int sum = 0;
//倒数第二个月
int lastMonth = 1;
//倒数第三个月
int lastMonthBefore = 1;
for(int i = 0;i<(n-2);i++)
{
sum = lastMonth + lastMonthBefore;
lastMonthBefore = lastMonth;
lastMonth = sum;
System.out.println("本月总兔子数:"+sum+" 倒数第二个月的兔子数:"+lastMonth+" 倒数第三个月的兔子数:"+lastMonthBefore);
}
System.out.println(sum);
}
}
作者: superob123 时间: 2014-5-31 09:54
下个月的兔子数量=上个月有生育能力兔子数量+当月兔子的数量,因为兔子从出生到具有生育能力要经历2个月后,所以数列的相邻3个元素为一个周期,第一个元素为上个月有生育能力兔子数量,第二个元素为当月兔子的数量,第3个元素为下个月的兔子数量。又因为第一个月和第二个月的兔子对数唯一,所以,可以用方法迭代来完成。
- import java.util.*;
- public class Test4 {
- public static int RabbitNum(int n)
- {
- //从第3项开始,每一项都等于前两项的和,所以return RabbitNum(n-1)+RabbitNum(n-2)
-
- if(n>2)
- {
- return RabbitNum(n-1)+RabbitNum(n-2);
- }
- //单递归到n<2,返回1
-
- return 1;
-
- }
-
- public static void main(String[] args)
- {
- //定义变量n代表想要求得项数
- int n=0;
- System.out.println("输入你想求得项数:");
- //从键盘录入n
- Scanner input=new Scanner(System.in);
- n=input.nextInt();
-
- System.out.println("结果是:"+RabbitNum(n));
- }
- }
复制代码
作者: 北极£莜蓝 时间: 2014-5-31 21:56
恩,谢谢了,恍然大悟.从第三个月开始就简单多了
作者: 北极£莜蓝 时间: 2014-5-31 21:58
public static void main(String[] args) {
int a,b,c;//a表示当前月份的兔子.b代表前一个月的兔子数,.c代表前两个月的兔子;
a = 2; b=c=1;
for(int i=3;i <= 20;i++) {
a=b+c;
c=b;
b=a;
}
System.out.println("for兔子的个数:"+a);
System.out.println("函数兔子"+fun(20));
int arr[] = new int[21];
for(int i=1;i<arr.length;i++) {
if(i==1||i==2)
arr[i]=1;
else
arr[i]=arr[i-1]+arr[i-2];
}
System.out.println("数组兔子"+arr[20]);
}
public static int fun(int month) {
if(month == 1|| month== 2)
return 1;
else
return fun(month-1)+fun(month-2);
}
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |