使用计算机计算组合数+汉诺塔+判断回文

Posted (?ω?)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用计算机计算组合数+汉诺塔+判断回文相关的知识,希望对你有一定的参考价值。

使用计算机计算组合数

一、实验设计思想:

    定义类A来存放递推求阶乘的方法,类B存放利用杨辉三角求cnk的方法,类C存放递归求阶乘的方法,A中即1*2*3.。。。较为简单,B中先定义数组来显示杨辉三角,cnk即a[n+1][k+1]的值。C类中方法即要想求n!则需要n-1!*n以此类推用递归计算。

二、程序流程图

三、程序源代码:

 

class A

{

public int 求阶乘(int n)

{int n1=1;

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

{

n1=n1*i;

}

return n1;

}

}

class B

{

public  int cnk(int n,int k)

{

int b=1;

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

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

{

a[i][0]=1;

a[i][i]=1;

}

 

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

{

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

{

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

}

}

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

{

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

{

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

}

 

System.out.println("");

b++;

}

return a[n][k];

}

}

class C

{

public int 求阶乘(int n)

{

 

 

if(n==1)

return 1;

else 

 

return (求阶乘(n-1)*n);

 

 

 

}

public int 求阶乘大(int n)

{

return 0;

}

}

public class zuoye {

 

public static void main(String[] args) {

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

B b=new B();

A a=new A();

C c=new C();

int n,k;

n= Integer.parseInt(JOptionPane.showInputDialog("请输入n"));

k= Integer.parseInt(JOptionPane.showInputDialog("请输入k"));

 

if(n>=k)

{

JOptionPane.showMessageDialog(null,a.求阶乘(n)/a.求阶乘(n-k)/a.求阶乘(k)+"="+a.求阶乘(n+1)/a.求阶乘(n+1-k)/a.求阶乘(k)+"-"+a.求阶乘(n)/a.求阶乘(n-k+1)/a.求阶乘(k-1));

System.out.println(b.cnk(n, k));

JOptionPane.showMessageDialog(null, "Cnk="+c.求阶乘(n)/c.求阶乘(n-k)/c.求阶乘(k));

 

}

四、结果截图:

 

 递归解决汉诺塔问题

一、实验设计思想:

      若想将n个盘子移到第三个位置,则现需要将前n-1个盘子移到第二个位置然后把第三个盘子移到三个位置,再把第n-1个盘子通过1位置移到3位置上,正好符合递归的用法。

二、流程图

三、源代码

class Yidong

{

public  void move(int n,char a,char b)

{

System.out.println("标号"+n+"的盘子:"+a+"->"+b);

}

public  void yd(int n,char  A ,char B,char C)

 

{//将A上的n个盘子通过B的辅助移到C上

if(n==1)

move(1,A,C);

else

{

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

move(n,A,C);

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

}

}

}

public class hannuota {

 

public static void main(String[] args) {

Yidong y=new Yidong();

int n;

char a,b,c;

n=Integer.parseInt(JOptionPane.showInputDialog(null,"输入盘子数"));

y.yd(n,\'A\',\'B\',\'C\');

 

 

}

四、实验结果截图:

判断字符串的回文情况

一、回文即正着和倒着一样,先输入一个字符串,然后把它转化成字符数组,从两边向中间推进,进行判断。

二,流程图

 

三,源代码

public class Main {

 

public static void main(String[] args) {

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

 

String s=JOptionPane.showInputDialog(null,"请输入要判断的字符串:");

char[] ch = s.toCharArray();

if(p(ch,ch.length,0)==1)

JOptionPane.showConfirmDialog(null,"是回文字符串",

"判断结果",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);

else if(p(ch,ch.length,0)==0)

JOptionPane.showConfirmDialog(null,"是不回文字符串",

"判断结果",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);

 

}

static int  p(char a[],int len,int  n)

{

if(n>=len-1-n)

return 1;

else if(p(a,len,n+1)==1&&a[n]==a[len-n-1])

return 1;

else return 0;

}

 

}

四、结果截图:

 

 

 

 

   

以上是关于使用计算机计算组合数+汉诺塔+判断回文的主要内容,如果未能解决你的问题,请参考以下文章

递归(计算组合数判断回文字符串汉诺塔问题)

课后作业——递归(组合数汉诺塔回文)

递推递归组合数,汉诺塔,回文数问题(java)

02方法课后作业

2017.11.26 计算机算法之分治与递归——汉诺塔

java 算法 递归 汉诺塔(计算移动次数)