实验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、结果截图