1)求一个非负数的阶乘
package ex;
import java.util.*;
public class ex1 {
public static void main (String args[]) {
Scanner myscanner = new Scanner(System.in);
System.out.println("please input a number:");
int n = myscanner.nextInt();
T t = new T();
if(t.factorial(n)==-1)
System.out.println("请输入非负数求阶乘");
else
System.out.println( n+"的阶乘为"+t.factorial(n));
}
}
class T{
public int factorial(int n) {
if(n>0)
{
if(n>1)
return factorial(n-1)*n;
else
return 1;
}
else
return -1;
}
}
2)斐波那契数列
package ex;
import java.util.*;
public class ex2 {
public static void main(String args[]) {
Scanner myscanner = new Scanner(System.in);
System.out.println("please input a number:");
int n = myscanner.nextInt();
method AA = new method();
if(AA.fibonacci(n)==-1)
System.out.println("非正数不满足题意");
else
System.out.println("第"+n+"个数是"+AA.fibonacci(n));
}
}
class method {
public int fibonacci(int n) {
if(n>0)
{
if(n==1||n==2)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
else
return -1;
}
}
3)猴子吃桃问题:有一堆桃子,猴子第一天吃了其中一半,并再多吃了一个,以后的每天猴子都吃其中的一半,然后再多吃一个,当到第10 天时,想再吃时(即还没吃),发现只有一个桃子了,问最初有多少桃子? 1534个
package ex;
import java.util.*;
public class ex3 {
public static void main(String args[]) {
Scanner myscanner = new Scanner(System.in);
System.out.println("please input a number:");
int day = myscanner.nextInt();
SS M = new SS();
if(M.peach(day)==-1)
System.out.println("天数不满足题意");
else
System.out.println("第"+day+"天还有"+M.peach(day)+"个桃子");
}
}
class SS{
public int peach(int day) {
if(day>=1&&day<=10) {
if(day==10)
return 1;
else
return (peach(day+1)+1)*2;
}
else
return -1;
}
}
注:逆推思维,从第10天的一个桃开始往前推。
4)迷宫问题
package ex;
public class ex4 {
public static void main(String args[])
{
int a[][]=new int[8][7];//8行7列的地图
for(int i =0;i<7;i++)//设置障碍,其中1代表不能走,0代表能走,
{//代表在地图四周设置上障碍
a[0][i]=1;
a[7][i]=1;
}
for(int j=0;j<8;j++) {
a[j][0]=1;
a[j][6]=1;
}
System.out.println("======地图为=====");
for(int i=0;i<a.length;i++)
{
for(int j =0;j<a[i].length;j++)
{
System.out.print(a[i][j]);
}
System.out.println("");
}
R t = new R();
t.findway(a,1,1);
System.out.print("======可走路径如下=====");
for(int i=0;i<a.length;i++)
{
for(int j =0;j<a[i].length;j++)
{
System.out.print(a[i][j]);
}
System.out.println("");
}
}
}
class R{
public boolean findway(int a[][],int x,int y ) {//a[][]代表这个地图,x,y表示起始位置
if(a[6][5]==2)//2代表能走,已经走过,3代表不能走通,已经走过
return true;
else
{
if(a[x][y]==0)
{
a[x][y]=2;
if(findway(a,x+1,y))//设置了下一步走的方向的优先级是:下->右->上->左
return true;
else if(findway(a,x,y+1))
return true;
else if(findway(a,x-1,y))
return true;
else if(findway(a,x,y-1))
return true;
else
{
a[x][y]=3;
return false;
}
}
else
return false;
}
}
}
5)汉诺塔问题
package ex;
import java.util.Scanner;
public class ex5 {
public static void main (String args[]) {
Scanner myscanner = new Scanner(System.in);
System.out.println("please input a number:");
int n = myscanner.nextInt();
tower t = new tower();
t.move(n,'a','b','c');
}
}
class tower{
public void move(int n,char A,char B,char C) {//n个盘子
if(n==1)
System.out.println(A+"->"+C);
else {
move(n-1,A,C,B);//将n-1个盘子先移到B上
System.out.println(A+"->"+C);//再把最下面的盘子移到C上
move(n-1,B,A,C);//然后再把B上的n-1个盘子移到C上
}
}
}
6)八皇后问题
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。在计算机问世后有更多的方法。
package eclipse;
public class queen01 {
public static void main(String args[]) {
Q q=new Q();
q.put(0);
System.out.print("共有"+q.count+"种摆放结果");
}
}
class Q{
int max=8;
int count=0;
/*public Q(int max)
{
this.max=max;//我有疑惑为什么不可以用构造器初始化max??
}*/
int a[] = new int[max] ;
public void print() {//打印出摆放结果
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
count++;
System.out.println();
}
public boolean judge(int n) {//判断第n个皇后在第n行的位置
for(int i=0;i<n;i++) {
if(a[n]==a[i]||Math.abs(a[n]-a[i])==Math.abs(n-i))
return false;
}
return true;
}
public void put(int n) {//确定第n个皇后的位置
if(n==max) {//
print();
return;
}
for(int i=0;i<max;i++) {
a[n]=i;
if(judge(n))
put(n+1);
}
}
}