Java实现汉诺塔:

程序设计思想:

1.首先输入盘子的数量n,如果盘子的数量是1,则直接将编号为1的圆盘从A移到C,递归结束。

2.否则:

递归,将A上编号为1n-1的圆盘移到B,C做辅助塔;

直接将编号为n的圆盘从AC;

递归,将B上的编号为1n-1的圆盘移到C,A做辅助塔。

 

程序流程图:

 

 

程序源代码:

package tourial2;

 

import java.util.Scanner;

 

public class Hanio {

public static int m=0;

public static void move (String A,int n,String C)

{

System.out.println(++m+": "+n+","+A+"->"+C);

}

public static void Hanio (int n,String A,String B,String C)

{

if(n==1)

move(A,1,C);

else

{

 

Hanio(n-1,A,C,B);

move(A,n,C);

Hanio(n-1,B,A,C);

}

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

String A ,B ,C ;

Scanner input=new Scanner(System.in);

System.out.println("请输入三个盘子的名称:");

A=input.next();

B=input.next();

C=input.next();

System.out.println("请输入盘子的个数:");

int n=input.nextInt();

Hanio(n,A,B,C);

}

 

}

程序截图:

 

 

 

问题二:随意输入一个任意大小的字符串,判断他是不是回文字符串。

程序设计思想:

从键盘随意输入一个字符串,并将其赋值给一个数组,然后用递归进行,若i=j,泽肯定是递归,否则从数组的首元素与尾元素进行比较,若相等,则进行i++j--,不断向中间靠拢,直到达到判断条件i>=j(i=j是输入的字符串的长度为偶数个,i>j是输入的字符串有奇数个),中间若有一次不符合判断,直接跳出递归,结束进程,输出不是回文字符串。(i是指的字符串的第一个元素的下标,j是指的字符串的最后一个元素的下标)

程序设计流程图:

 

 

程序源代码:

package tourial2;

 

import java.util.Scanner;

 

public class huiwenshu {

 

 

public static void huiwen(char a[],int j,int i)

{

if(i>=j)

{

if(a[i]==a[j])

 

System.out.println("是回文");

System.exit(0);

}

if(a[i] == a[j])

huiwen(a,--j,++i);

else 

{

System.out.println("他不是回文数!");

System.exit(0);

}

}

public static void main(String[] args)

{

String s;

int j;

int i=0;

Scanner input=new Scanner(System.in);

System.out.println("请输入 一个字符串:");

s=input.next();

char a[];

a=s.toCharArray();

j=a.length-1;

for( int k=0;k<s.length();k++)

{

System.out.print (a[k]);

}

huiwen(a,j,i);

}

 

程序截图:

 

 

 

 

根据杨辉三角递推求组合数

程序设计思想:

根据杨辉三角的规律,得出杨辉三角的第n行的第m个的值等于该位置的元素的上一行的左右两个输的和,然后根据杨辉三角与组合数的关系即c(n,m)等于杨辉三角的第n+1的第m+1个元素的值,根据这个来写出组合数的值。

程序流程图:

 

 

程序源代码:

 package tourial2;

 

import java.util.Scanner;

 

public class yanghuisanjiao

{

      public static void yanghuisanjiao(int n,int m)

  {

if(m==1)

{

System.out.println("输出结果为:");

System.out.println(n);

}

else

{

n=n+1;

int a[][] = new int [n][n];

System.out.println(1);

for(int i=0;i<n;i++)

a[i][0]=1;

for(int i=1;i<n;i++)

 

{

System.out.print(1+" ");

for(int j=1;j<=i;j++)

{

a[i][j]=a[i-1][j]+a[i-1][j-1];

        System.out.print(" "+a[i][j]);

 

}

System.out.println();

    }

System.out.println();

System.out.println("输出结果:");

System.out.println(a[n-1][m]);

    }

}

public static void main(String[] args) {

int x,y;

Scanner input=new Scanner(System.in);

System.out.println("请输入第一个数:");

        x=input.nextInt();

System.out.println("请输入第二个数:");

        y=input.nextInt();

        while(x>y)

        {

         System.out.println("请重新输入:");

         System.out.println("请输入第一个数:");

            x=input.nextInt();

     System.out.println("请输入第二个数:");

            y=input.nextInt();

        

        }

        yanghuisanjiao(y,x);

}

 

}

程序截图:

 

 

利用阶乘公式来计算组合式:

程序设计思想:

根据公式

来计算组合数的大小,从键盘输入n,m的值,设计一个计算阶乘的大小,如果输入的数a10,则直接return 1,否则运用递归,计算a-1的阶乘,直到a1时,递归结束。

程序流程图:

                                                                                                             

 

阶乘的流程图:

                                                                                               

 

程序的源代码:

package tourial2;

 

import java.math.BigInteger;

import java.util.Scanner;

 

public class zuheshu {

 

 

public static BigInteger calculateN2(int n) {

if(n==1 || n==0){

return BigInteger.valueOf(1);

}

return BigInteger.valueOf(n).multiply(calculateN2((n-1)));

}

 

 

public static void main(String[] args) {

 

Scanner scanner=new Scanner(System.in);

 

System.out.print("请输入N1");

int number1=scanner.nextInt();

BigInteger f1=calculateN2(number1);

//System.out.println(number1+"!="+calculateN2(number1));

 

System.out.print("请输入N2");

int number2=scanner.nextInt();

BigInteger f2=calculateN2(number2);

 

BigInteger f3=calculateN2(number1-number2);

//System.out.println(number2+"!="+calculateN2(number2));

BigInteger f4=f2.multiply(f3);

 

BigInteger f5= f1.divide(f4);

System.out.println("组合输的结果是:"+f5);

}

 

}

程序截图:

                                                                             

 

运用公式计算组合数:

程序设计思想:

输入n,m,两个数(来组成要求出的组合数)(n>m),如果m=1,则输出结果n,如果m!=1,则进入递归,运用公式,直到进行到n-m=1的时候,结束递归,输出结果。

程序流程图:

                                                                                   

 

程序源代码:

package tourial2;

 

import java.util.Scanner;

 

public class gongshi {

public static int yang(int n,int m)

   {

int b;

if(m!=1)

  {

    while(n-m==1)

    {

  return n;

    }

b=yang(n-1,m-1)+yang(n-1,m);

  }

else 

b=n;

return b;

   }

public static void main(String[] args) {

 

int n,m;

Scanner input=new Scanner(System.in);

System.out.println("请输入两个数:");

n=input.nextInt();

m=input.nextInt();

System.out.println("输出结果:"+yang(n,m));

}

 

}

程序截图: