1.汉诺塔
介绍
汉诺塔(Hanoi Tower) :它描述了如何将一堆大小不同、穿在一根柱子上的盘子移动到另一根柱子上,同时满足以下规则:
每次只能移动一个盘子。
每个移动盘子时,大的盘子不能放在小的盘子上面。
可以使用一根额外的柱子作为辅助。
算法实现
xml
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*)。
算法实现
xml
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格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上
算法实现
xml
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);
}
}
感谢大家的支持,关注,评论,点赞!
再见!!!