使用計算機計算組合數+漢諾塔+判斷回文
使用計算機計算組合數
一、實驗設計思想:
定義類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
{
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
}
}
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
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;
}
}
四、結果截圖:
使用計算機計算組合數+漢諾塔+判斷回文