1. 程式人生 > >實驗二作業

實驗二作業

pub 實現 每次 image printf char == 三種 個數

[ 實驗一 ] 計算組合數

利用階乘來計算組合數是一種比較簡單的方法,先寫一個階乘函數,然後再寫組合數公式並調用階乘函數,計算組合數的值,主函數中輸入n和k的值即可。

源代碼:

import javax.swing.JOptionPane; 
public class CombinationNumber1 {
    public static void main(String[] args){
        int n,k;
        String a=JOptionPane.showInputDialog("請輸入一個正整數n");
        n=Integer.parseInt(a);
        String b=JOptionPane.showInputDialog("請輸入一個正整數k");
        k=Integer.parseInt(b);
        JOptionPane.showMessageDialog( null, combinnum(k,n),"result",JOptionPane.INFORMATION_MESSAGE );
    }
    public static long factorial(int i){
        long j=1;
        if(i!=1)
        {  
        	j=i*factorial(i-1);
        }
        else
            i=1;
        return j;
    }
    public static long combinnum(int k,int n)
    {
        long i;
        i=factorial(n)/(factorial(k)*factorial(n-k));
        return i;
    }

}

  驗證結果:

技術分享技術分享技術分享

第二種方法是利用楊輝三角來計算;

第三種方法,利用遞歸的方法稍微復雜,但是熟悉原理之後也會很容易寫出來,遞歸是一種很方便

import javax.swing.JOptionPane; 
public class CombinationNumber2 {
    public static void main(){
        int n,k;
        String a=JOptionPane.showInputDialog("請輸入一個正整數n");
        n=Integer.parseInt(a);
        String b=JOptionPane.showInputDialog("請輸入一個正整數k");
        k=Integer.parseInt(b);
        JOptionPane.showMessageDialog( null, recursion(k,n),"result",JOptionPane.INFORMATION_MESSAGE );
    }
    public static long recursion(int k,int n)
    {
        long i=0;
        if(k!=1)
        {
        	i=recursion(k-1,n)+recursion(k,n);
        }
        else
            return n;
        return i;
    }
}

  驗證結果:

技術分享技術分享技術分享

[ 實驗二 ]漢諾塔問題

漢諾塔是遞歸裏的經典問題,通過遞歸來解決也是最簡單的辦法,首先需要考慮盤子的個數,柱子標為ABC,要由A搬至C,在只有一個盤子時,就將它直接搬至C,當有兩個盤子,就將B當作輔助柱。 如果盤數超過2個,將最後一個盤子遮起來,就很簡單了,每次處理兩個盤子,也就是:A->B、A ->C、B->C這三個步驟,而被遮住的部份,也就是進入程序的遞歸處理。

源代碼:

public class HanoiTower {
   
       public static void moveDish( int disks, int Peg1, 
          int Peg2, int Peg3 )
       {
         
          if ( disks == 1 )
          {
             System.out.printf( "\n%d --> %d", Peg1, Peg2 );
             return;
          } 

       
          moveDish( disks - 1, Peg1, Peg3, Peg2 );

         
          System.out.printf( "\n%d --> %d", Peg1, Peg2 );

          
          moveDish( disks - 1, Peg3, Peg2, Peg1 );
       } 

       public static void main( String[] args )
       {
          int startPeg = 1; 
          int endPeg = 3;
          int tempPeg = 2; 
          int totalDisks = 3; 
          
          moveDish( totalDisks, startPeg, endPeg, tempPeg );
       } 
    } 

  驗證結果:

技術分享

[ 實驗三 ]回文字符串

回文字符串就是類似於12321的形式,字符串的第一個和最後一個相同,第二個和倒數第二個相同,這樣來實現回文判斷。

代碼中的test函數是程序的關鍵,利用test來判斷字符串是不是回文形式的,主函數中輸入輸出並調用函數即可。

import javax.swing.JOptionPane;
public class Palindrome {  
    
    public static void main(String[] args){  
        String test=JOptionPane.showInputDialog( "請輸入字符串:" );
        int i = 0;  
        int j = test.length() - 1;  
        if(isPalindrome(test, i, j))
        {
            JOptionPane.showMessageDialog(null, test+"是回文字符串",
                    "result",
                    JOptionPane.INFORMATION_MESSAGE );
             
        }
        else
        {
            JOptionPane.showMessageDialog(null, test+"不是回文字符串",
                    "result",
                    JOptionPane.INFORMATION_MESSAGE );
        }
         
    }  
    public static boolean isPalindrome(String s,int i,int j){  
        if(i > j)  
            throw new IllegalArgumentException();  
        if(i == j)  
            return true;  
        else{  
            return (s.charAt(i) == s.charAt(j)) && isPalindrome(s,i+1,j-1);  
        }  
    }  
      
}

  結果截圖:

技術分享技術分享

技術分享技術分享

實驗二作業