“水仙花数”和“斐波纳契数列”
一、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153 = 1的三次方+5的三次方+3的三次方。
程序分析:利用 for 循环控制100-999个数,每个数分解出个位,十位,百位。
代码实现如下:
1 public class Lotus{ 2 public static void main(String[] args){ 3 for(int i=100;i<1000;i++){ 4 if(isLotus(i)) 5 System.out.print(i+""); 6 } 7 System.out.println(); 8 } 9 //判断水仙花数 10 private static boolean isLotus(int lotus){ 11 int m = 0; 12 int n = lotus; 13 int sum = 0; 14 m = n/100; 15 n -= m*100; 16 sum = m*m*m; 17 m = n/10; 18 n -= m*10; 19 sum += m*m*m + n*n*n; 20 if(sum==lotus) 21 return true; 22 else 23 return false; 24 } 25 }
二、题目:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行
基础知识:
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。
代码实现一:
1 public class Fibonacci1 { 2 // 定义三个变量方法 3 public static void main(String[] args) { 4 int a = 1, b = 1, c = 0; 5 System.out.println("斐波那契数列前20项为:"); 6 System.out.print(a + "\t" + b + "\t"); 7 //因为前面还有两个1、1 所以i<=18 8 for (int i = 1; i <= 18; i++) { 9 c = a + b; 10 a = b; 11 b = c; 12 System.out.print(c + "\t"); 13 if ((i + 2) % 5 == 0) 14 System.out.println(); 15 } 16 } 17 18 }
代码实现二:
1 public class Fibonacci2 { 2 // 定义数组方法 3 public static void main(String[] args) { 4 int arr[] = new int[20]; 5 arr[0] = arr[1] = 1; 6 for (int i = 2; i < arr.length; i++) { 7 arr[i] = arr[i - 1] + arr[i - 2]; 8 } 9 System.out.println("斐波那契数列的前20项如下所示:"); 10 for (int i = 0; i < arr.length; i++) { 11 if (i % 5 == 0) 12 System.out.println(); 13 System.out.print(arr[i] + "\t"); 14 } 15 } 16 17 }
代码实现三:
1 public class Fibonacci3 { 2 // 使用递归方法 3 private static int getFibo(int i) { 4 if (i == 1 || i == 2) 5 return 1; 6 else 7 return getFibo(i - 1) + getFibo(i - 2); 8 } 9 10 public static void main(String[] args) { 11 System.out.println("斐波那契数列的前20项为:"); 12 for (int j = 1; j <= 20; j++) { 13 System.out.print(getFibo(j) + "\t"); 14 if (j % 5 == 0) 15 System.out.println(); 16 } 17 } 18 19 }
此问题的演变:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列:1,1,2,3,5,8,13,21,……
代码实现如下:
1 public class Rabbit { 2 public static void main(String[] args){ 3 int n = 10; 4 System.out.println("第"+n+"个月兔子总数为"+fun(n)); 5 } 6 private static int fun(int n){ 7 if(n==1 || n==2) 8 return 1; 9 else 10 return fun(n-1)+fun(n-2); 11 } 12 }