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) } } } 题目:将一个正整数分解质因数。例如:输入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); } }