1.汉诺塔
介绍
汉诺塔(Hanoi Tower):它描述了如何将一堆大小不同、穿在一根柱子上的盘子移动到另一根柱子上,同时满足以下规则:
每次只能移动一个盘子。
每个移动盘子时,大的盘子不能放在小的盘子上面。
可以使用一根额外的柱子作为辅助。
算法实现
package com.practice.java;import java.util.Scanner;public class Example1 {//移动次数public static int val(int m) {int num;if(m == 1) {num = 1;}else {num = 2 * val(m - 1) + 1;}return num;}//移动过程public static void Hannoi(int n,char A,char B,char C) {if(n == 1) {move(1,A,C);}else {Hannoi(n-1,A,C,B);move(n,A,C);Hannoi(n-1,B,A,C);}}private static void move(int i, char x, char y) {System.out.println("把" + i + "号盘子从" + x + "移动到" + y);}public static void main(String[] args) {int num = 0;System.out.print("请输入需要移动盘子的数量: ");Scanner scanner = new Scanner(System.in);num = scanner.nextInt();if(num == 0) {System.out.println("输入的数量必须大于0!");}else {System.out.println("一共需要移动:" + val(num) + "次");System.out.println("移动过程如下:");Hannoi(num,'A','B','C');}scanner.close();}}
2.斐波那契数列
介绍
斐波那契数列(Fibonacci sequence) 又称黄金分割数列 ,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。
算法实现
package com.practice.java;import java.util.Scanner;
public class Example2 {public static int fib(int n) {int f = 0;if(n == 0) {return 0;}if(n == 1) {return 1;}f = fib(n-2) + fib(n -1);return f;}public static void main(String[] args) {int n,m = 0;System.out.print("请输入一个整数: ");Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = fib(n);System.out.print("第" + n + "项是:" + m);m = 0;for(int i = 1;i <= n;i++) {m += fib(i);}System.out.println("前" + n + "项和是:" + m);scanner.close();}
}
3.八皇后
介绍
八皇后:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上
算法实现
package com.practice.java;
public class Example3 {static int Num = 0;//统计方案个数static boolean c[] = new boolean[9];//判断当列是否可放皇后static boolean L[] = new boolean[17];//判断左对角线是否可放皇后static boolean R[] = new boolean[17];//判断右对角线是否可放皇后static final int Normalize = 9; //统一数组下标为正数 static int Queen[] = new int[9]; //标记皇后public static void check(int i) {for(int j = 1;j <= 8;j++) {if ((c[j] == true) && (L[i - j + Normalize] == true) && (R[i + j] == true)){//表示i行j列可放Queen[i] = j;c[j] = false;L[i -j + Normalize] = false;R[i + j] = false;if(i < 8) {//继续放置皇后check(i + 1);}else {//放完八个皇后Num++;System.out.println("方案" + Num +":");for(int k = 1;k <= 8;k++) {System.out.print(k + "行" + Queen[k] +"列" + " ");}System.out.println();}c[j] = true;L[i -j + Normalize] = true;R[i + j] = true;} }}public static void main(String[] args) {for(int i = 1;i < 9;i++) {c[i] = true;}for(int i = 0;i < 17;i++) {L[i] = R[i] = true;}check(1); }
}
感谢大家的支持,关注,评论,点赞!
再见!!!