實驗二作業
阿新 • • 發佈:2017-10-14
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); } } }
結果截圖:
實驗二作業