24點遊戲是經典的紙牌益智遊戲 java 程式 原始碼 測試結果
阿新 • • 發佈:2018-12-12
24點遊戲是經典的紙牌益智遊戲。 常見遊戲規則: 從撲克中每次取出4張牌。使用加減乘除,第一個能得出24者為贏。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求程式設計解決24點遊戲。 基本要求: 隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,用擅長的語言(C/C++/Java或其他均可)實現程式解決問題。 1.程式風格良好(使用自定義註釋模板) 2.列出表示式無重複。 思路: 先產生隨機數,窮舉出所有的可能的表示式組合。然後將隨機數進行四個一組排列組合,最後將這四個數與加減乘除相匹配輸出結果。
表示式的生成:
package point; import java.util.Arrays; import java.util.Random; public class card { static int num=0; public static void main(String[] args){ Random r = new Random(); int [] c = new int[4]; for (int i = 0; i < c.length; i++) { c[i] = 1 + r.nextInt(13); System.out.println("產生的四位隨機數為:"+c[i]); } Anagram.permute(c, 0); int[] re = Anagram.getResult(); int [] num = new int [4]; int idx = 0; for (int i = 0; i < re.length; i++) { num[idx++] = re[i]; if((i+1)%4==0){ idx = 0; opertor(num); } } } public static void opertor(int[]cards){ double sum=0; for(int i=0;i<4;i++){ double sum1=code(cards[0],cards[1],i); for(int j=0;j<4;j++){ double sum2=code(sum1,cards[2],j); for(int k=0;k<4;k++){ sum=code(sum2,cards[3],k); int[] symbolNum={i,j,k}; String[] symbol=new String[4]; symbol=symbol(symbolNum); if(sum==24){ num++; System.out.println("["+"("+cards[0]+" "+symbol[0]+" "+cards[1]+")"+" "+symbol[1]+" "+cards[2]+"]"+" "+symbol[2]+" "+cards[3]); } } } } } public static double code(double num1,double num2,int num){ double sum=0.0; if(num==0){ sum=num1+num2; } else if(num==1){ sum=num1-num2; } else if(num==2){ sum=num1*num2; } else{ sum=num1/num2; } return sum; } /* * 將代表計算符號的數字轉換成字元存入Sring陣列並返回 */ public static String[] symbol(int[] symbolNum){ String[] symbol=new String[4]; for(int i=0;i<3;i++){ int sym=symbolNum[i]; switch (sym) { case 0: symbol[i]="+"; break; case 1: symbol[i]="-"; break; case 2: symbol[i]="*"; break; case 3: symbol[i]="/"; break; default: break; } } return symbol; } }
四個隨機數的生成:
package point; import java.util.Arrays; public class Anagram{ static int [] result = new int [96]; static int index = 0; public static int[] getResult() { return result; } //s表示,從array[start]後的資料進行全排列 public static void permute(int[] array,int start){ if(start==array.length){ // 輸出 for (int i : array) { result[index++] = i; } } else for(int i=start;i<array.length;++i){ swap(array,start,i); // 交換元素 permute(array,start+1); //交換後,再進行全排列演算法 swap(array,start,i); //還原成原來的陣列,便於下一次的全排列 } } private static void swap(int[] array,int s,int i){ int t=array[s]; array[s]=array[i]; array[i]=t; } public static void main(String[] args){ int[] array=new int[]{3,4,5,6}; permute(array, 0); int[] re = Anagram.getResult(); int [] num = new int [4]; int idx = 0; for (int i = 0; i < re.length; i++) { num[idx++] = re[i]; System.out.print(re[i]+" "); if((i+1)%4==0){ idx = 0; System.out.println(Arrays.toString(num)); } } } }
執行結果: 程式流程圖: