Java经典算法(一)

Java经典算法(二)
https://blog.csdn.net/Veer_c/article/details/106264536

【程序1】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…,为Fibonacci数列(斐波那契数列)。
1.使用递归求解:
解题代码:

import java.util.*;
public class Test1{
   
    public static void main(String args[]){
   
    while(true){
   
    int yueshu=new Scanner(System.in).nextInt();
    System.out.println("您好:第"+yueshu+"个月的兔子数为:"+f(yueshu)+"对。");}}
    public static int f(int x){
   
        if(x==1 || x==2)
            return 1;
        else
    return f(x-1)+f(x-2);}
}

代码运行结果如下图所示:在这里插入图片描述

注意:除经典算法外,我还整理了十套最新Java架构项目实战教程+大厂面试题库,想学的 点击此处获取,没基础勿进!

2.使用循环
解题代码:

import java.util.*;
public class Test1$1{
   
    public static void main(String args[]){
   
    Scanner read=new Scanner(System.in);
    while(true){
   
    int yueshu=read.nextInt();
        int sum=1,oldsum=0,temp=0;
        for(int i=0;i<yueshu-1;i++){
   
                oldsum=sum;
                sum+=temp;
                temp=oldsum;}
        System.out.println("您好:第"+yueshu+"个月的兔子数为:"+sum+"对。");}
        }
}

程序运行结果:
在这里插入图片描述
总结:
1.在方法1中,由于键盘录将Scanner方法两行代码写为一行,虽然看着简洁,减少了代码量,但是,在while中每次循环都会录入月数时都会new 一个Scanner对象,造成额外的资源消耗。
2.方法一使用递归,有可能会造成内存溢出,对内存要求高,而方法二使用循环可以有效的避免这个问题。

焦点关注:

那么问题来了!!!
众所周知,因不以兔的意志为转移的且不可抗拒的因素存在,近亲(三代以内的直系、旁系亲属)结婚非法,是不能领证的。所以产生一个问题:兔子家族世世代代需要如此苟且而没有诗和远方吗?

No!!!

可以预见,在许久的将来,兔子家族中的非近亲的兔子可以两两成对,全员领证。假如非要给这个时间加上一个期限,最少是多久呢?
经过多久以后,兔子家族的兔子夫妻们可以领结婚证而不犯法呢?

求大神解答???
求大神解答???
求大神解答???

【程序2】

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

public class Test2{
   
	public static void main(String[] args){
   
		int i=0,x=0;
	while(x<5){
   
	i++;
	int q=i;
	for(int y=0;y<5
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值