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


    使用计算机计算组合数

    一、实验设计思想:

        定义类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;

    }

    }

    四、结果截图:

     

       

  • 相关阅读:
    腾讯2014年实习生招聘笔试面试经历
    Unity MVC框架 StrangeIoC
    Android入门第八篇之GridView(九宫图)
    拓扑排序
    C:打印菱形(自己的方法)
    JSP中Session的使用
    继承Application实现Android数据共享
    使用Java高速实现进度条
    首次启动优美新手指引tip
    递归算法
  • 原文地址:https://www.cnblogs.com/837634902why/p/7662344.html
Copyright © 2020-2023  润新知