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);
}
}