Java练习题——兔子增长问题以及正整数分解质因数

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

兔子的规律为数列:1,1,2,3,5,8,13,21,34…

public class Demo1Rabbit {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入你想查看的最大月数:");
        int n = sc.nextInt();
        long b = fun(n);
        System.out.println("第"+n+"月有"+b+"对兔子");
    }
    public static long fun(int n){
        if (n<3){
            return 1;
        }
        //v1=增长速度,v2=兔子现有的对数,sum=兔子每个月增长后的数量
        long v1=1,v2=1,sum=0;
        /*
        当兔子开始繁殖时,一对兔子每个月即循环一次就会繁殖一对兔子,
        所以在每次循环过后把兔子的对数赋值给增长速度,
        把兔子增长后的数量赋值给兔子现有的对数。
         */
        for (int i = 2; i < n; i++) {
            sum = v1 +v2;
            v1 = v2;
            v2=sum;
        }
        return sum;
    }
    public static int number(int n){
        if (n==1 || n ==2){
            return 1;
        }else {
            return number(n-1)+number(n-2);//递归,斐波那契数列f(n)=f(n-1)+f(n-2)
        }
    }
}

  1. 题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5
import java.util.Scanner;

public class Demo2Prime {
    public static void main(String[] args) {
        // 新建一个键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int number = sc.nextInt();
        // 调用prime函数
        prime(number);

    }
    // 只作为打印,没有返回值,所以用void
    public static void prime(int n){
        /*
        分解质因数的时候,需要知道,1没有质因数。
        1、使用while死循环,直到满足条件后,使用break跳出循环。
        2、把n的值赋给m,防止后面输出的时候乱套,
        3、定义flag=2,flag是m需要整除的变量,
        4、定义分解质因数表达式字符串str
        5、开始循环,如果m能够整除flag,说明flag是m的一个因数,否则,flag+1
         */
        int m = n;
        int flag = 2;
        String str= "";//分解质因数表达式
        while (true){
            if (m%flag ==0){
                m = m/flag;
                System.out.println(m);
                if(m == 1){
                    str = str + flag ;
                    break;
                }
                str = str + flag + "*" ;
                System.out.println(str);
            }else {
                flag ++;
            }
        }
        System.out.println(n + "分解为正因数的结果为:"+n+"="+str);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值