zoukankan      html  css  js  c++  java
  • “水仙花数”和“斐波纳契数列”

    一、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: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 + "	" + b + "	");
      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 + "	");
     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] + "	");
     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) + "	");
     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 }
  • 相关阅读:
    PAT-乙级-1011. A+B和C (15)
    PAT-乙级-1010. 一元多项式求导 (25)
    PAT-乙级-1009. *说反话 (20)
    PAT-乙级-1008. 数组元素循环右移问题 (20)
    PAT-乙级-1007. 素数对猜想 (20)
    PAT-乙级-1006. 换个格式输出整数 (15)
    PAT-乙级-1005. 继续(3n+1)猜想 (25)
    PAT-乙级-1004. 成绩排名 (20)
    BZOJ 1030: [JSOI2007]文本生成器
    BZOJ 2938: [Poi2000]病毒
  • 原文地址:https://www.cnblogs.com/justlove/p/6925507.html
Copyright © 2011-2022 走看看