古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?
月数 | 成兔对数 | 幼兔对数 | 兔子总对数 |
---|---|---|---|
第1月 | 1 | 0 | 1 |
第2月 | 1 | 0 | 1 |
第3月 | 1 | 1 | 2 |
第4月 | 1 | 2 | 3 |
第5月 | 2 | 3 | 5 |
第6月 | 3 | 5 | 8 |
第7月 | 4 | 9 | 13 |
注意:两个月以上的兔子为成年。
规律总结:兔子总对数的规律如下
1,1,2,3,5,8,13,21,34,55,89,……
数学表达式:
F(n)=1;(n=1,2)
F(n)=F(n-1)+F(n-2);(n>=3)
注意:n为月数,F(n)为第n月的兔子对数。
import java.util.Scanner;
public class Rabbit {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入月数(n为任意正整数)n = ");
int n = input.nextInt();
int a1 = 1, a2 = 1;// 定义初始变量
int a;
for (int i = 0; i < n; i++) {
if (i < 2) {
System.out.println("第" + (i + 1) + "月兔子有" + 1 + "对");
} else {
a = a1 + a2;
System.out.println("第" + (i + 1) + "月兔子有" + a + "对");
a1 = a2;
a2 = a;
}
}
}
}
import java.util.Scanner;
public class Rabbit {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入月数(n为任意正整数)n = ");
int n = input.nextInt();
for (int i = 1; i <= n; i++) {
int num = f(i);
System.out.println("第" + i + "月兔子有" + num + "对");
}
}
// 递归方法1
private static int f(int i) {
if (i == 1 || i == 2) {
return 1;
} else {
return f(i - 1) + f(i - 2);
}
}
}
// 递归方法2 优
private static int f(int i) {
if (n < 3)
return 1;
else
return fibonacciSequence(n-1)+fibonacciSequence(n-2);
}
// 递归方法3 最优
private static int f(int i) {
return n<3 ? 1:fibonacciSequence(n-1)+fibonacciSequence(n-2);
}
题目:判断101-200之间有多少个素数,并输出所有素数。
判断素数的方法:用一个数分别在2~sqrt(这个数)的范围内取余,如果余数为零, 则表明此数不是素数,反之是素数。
public class PrimeNumber {
public static void main(String[] args) {
boolean result;
for (int i = 101; i <= 200; i++) {
result = false;
for (int j = 2; j < Math.sqrt(i); j++) {
if (i % j == 0) {
result = true;
break;
}
}
if (result == false) {
System.out.println(i + " ");
}
}
}
}
参考文档地址:百度百科-素数.
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
质数具有许多独特的性质:
\frac{n}{2
}"> 。题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
将三位数的个位、十位、百位都分别分离出来,然后去其各自的立方数,求和后与元数据进行比较是否相等。
Java中使用pow(a,b)方法计算数据a的b次幂。
Java pow()方法(菜鸟教程)
public class NarcissisticNumber1 {
public static void main(String[] args) {
for (int num = 100; num <= 999; num++) {
int a = (num / 100) % 10;
int b = (num / 10) % 10;
int c = num % 10;
if ((a * a * a) + (b * b * b) + (c * c * c) == num) {
System.out.println(num);
}
}
}
}
public class NarcissisticNumber2 {
public static void main(String[] args) {
for (int num = 100; num <= 999; num++) {
int a = (num / 100) % 10;
int b = (num / 10) % 10;
int c = num % 10;
if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num) {
System.out.println(num);
}
}
}
}
参考资料地址:百度百科-水仙花数.
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
附:其他位数的自幂数名字
水仙花数又称阿姆斯特朗数。
自幂数名称 | 总数 | 自幂数 |
---|---|---|
水仙花数 | 4 | 153,370,371,407 |
四叶玫瑰数 | 3 | 1634,8208,9474 |
五角星数 | 3 | 54748,92727,93084 |
六合数 | 1 | 548834 |
北斗七星书 | 4 | 1741725,4210818,9800817 |
八仙数 | 3 | 24678050,24678051,88593477 |
题目:将一个正整数分解质因数。例如:输入90,打印出90 = 2 * 3 * 3 * 5。
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
import java.util.Scanner;
public class PrimeFactor {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
String result;
do {
int count = 0;
System.out.println("请输入一个整数,输出所有质因数:");
num = input.nextInt();
System.out.print(num + "=");
for (int i = 2; i <= num; i++) {
if (num % i == 0) { // 质因数
if (count == 0)
System.out.print(i);
else
System.out.print("*" + i);
num = num / i;
if (num > i) {
i--;
}
count++;
}
}
System.out.println("\n还有继续吗?(y/n)");
result = input.next();
} while ("y".equalsIgnoreCase(result));
}
}
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
这个问题比较简单,使用if条件语句就可以轻松解决,不过也可以使用switch语句来解决。
并列条件
mport java.util.Scanner;
public class JudgmentGrade1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一门课目的成绩:");
int score = input.nextInt();
// 并列条件
if (score >= 90) {
System.out.print("A");
} else if (score >= 60 && score < 90) {
System.out.print("B");
} else {
System.out.print("C");
}
}
}
条件运算符的嵌套
import java.util.Scanner;
public class JudgmentGrade2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一门课目的成绩:");
int score = input.nextInt();
// 条件运算符的嵌套
if (score >= 60) {
if (score >= 90) {
System.out.print("A");
} else {
System.out.print("B");
}
} else {
System.out.print("C");
}
}
}