实验1 组合数公式,汉诺塔问题,回文字符串问题

一、实验01 组合数公式的计算

1、设计思想:

在这个题目中计算组合数一共给出了三种方法,按照所给的三种计算方式,分别写三个方法与之对应,根据用户选择的方法编号进行调用,

完成计算并输出

2、程序源代码

package zuheshu;

 

import javax.swing.JOptionPane;

 

public class Zuhe {

public long gongshi(int n,int k)

{

    long answer;

    long n1=1,k1=1,t1=1;

    for(int i=n;i>0;i--)

    {

        n1=n1*i;

    }

    for(int i=k;i>0;i--)

    {

        k1=k1*i;

    }

    for(int i=n-k;i>0;i--)

    {

        t1=t1*i;

    }

    System.out.println(n1);

    answer=n1/k1/t1;

    return answer;

    }

public long yanghui(int m,int k)

{

    long answer;

    int n=m+1;

    long yang[][];

    yang=new long[n+1][];

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

    {

        yang[i]=new long[i+1];

    }

    yang[0][0]=1;

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

    {

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

        {

            if(j==0||j==i)

            {

                yang[i][j]=1;

            }

            else

            {

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

            }

        }

    }

    answer=yang[m][k];

    return answer;

    }

public long digui(int n,int k)

{

    long answer;

    if(k==1)

    {

        answer=n;

    }

    else if(k==n)

    {

        answer=1;

    }

    else

    {

        answer=digui(n-1,k-1)+digui(n-1,k);

    }

    return answer;

    }

public static void main(String args[])

{

    Zuhe zu=new Zuhe();

    int n,k;

    n=Integer.parseInt(JOptionPane.showInputDialog( "Enter n" ));

    k=Integer.parseInt(JOptionPane.showInputDialog( "Enter k" ));

    Object[] a= {1,2,3};

    int op = JOptionPane.showOptionDialog(null, "选择使用的方法的编号", "标题",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, a, a[0]);

    long answer;

    switch(op)

    {

    case 0:answer=zu.gongshi(n,k);break;

    case 1:answer=zu.yanghui(n,k);break;

    case 2:answer=zu.digui(n,k);break;

    default:answer=0;

    }

    JOptionPane.showMessageDialog(null, "答案是 " + answer, "Results",JOptionPane.PLAIN_MESSAGE );

}

}

3、结果截图

 

 

 

 

 

二、实验02 汉诺塔问题

1、设计思想:

使用递归的思想,把三个盘子冲A移动到C,可以分解为三步,第一步把上边两个盘子移动到B,第二部把最后一个盘子移动到C,再把B中的两个盘子放到C,其中第二步又可以分为三步,把第一个盘子移动到C,再把第二个盘子移动到B,最后把第一个盘子移动到C,所以每一次移动都可以分解为这三步,使用递归直到n==1时结束

2、程序源代码

package hannuota;

 

import java.util.Scanner;

 

public class Hannuo {

public void move(char x,char y)

{

    System.out.println(x+"->"+y);

}

public void hanoi(int n,char one,char two,char three)

{

    if(n==1)

        move(one,three);

    else

    {

        hanoi(n-1,one ,three,two);

        move(one,three);

        hanoi(n-1,two,one,three);

    }

}

public static void main(String args[])

{

    System.out.println("输入n的个数:");

    int n;

    Scanner input = new Scanner(System.in);

    n=input.nextInt();

    Hannuo han=new Hannuo();

    System.out.println("操作的顺序为:");

    han.hanoi(n,'A','B','C');

}

}

 

3、结果截图

 

 

 

三、实验03 回文字符串问题

1、设计思想

输入一个字符串,建立一个字符数组,将字符串复制到字符数组中,再把字符数组的元素使用循环颠倒顺序并建立为新的字符串,使用equals()函数将两个字符串进行比较,最后得出结果

2、程序源代码

package huiwenzifu;

 

import javax.swing.JOptionPane;

 

public class Huizi {

public boolean panduan(String str)

{

    int size;

    size=str.length();

    char []a;

    a=new char[size];

    a=str.toCharArray();

    char b[];

    b=new char[size];

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

    {

        b[i]=a[size-1-i];

    }

    String str2=new String(b);

    boolean jieguo=str.equals(str2);

    return jieguo;

}

public static void main(String args[])

{

    String str;

    str=JOptionPane.showInputDialog( "请输入一个字符串" );

    Huizi hu=new Huizi();

    boolean jieguo=hu.panduan(str);

    JOptionPane.showMessageDialog(null, "该字符串是否为回文字符串: " + jieguo, "Results",JOptionPane.PLAIN_MESSAGE );

}

}

3、结果截图

 

 

posted @ 2017-10-14 07:54  奕然  阅读(233)  评论(0编辑  收藏  举报