1. 程式人生 > >24點遊戲是經典的紙牌益智遊戲 java 程式 原始碼 測試結果

24點遊戲是經典的紙牌益智遊戲 java 程式 原始碼 測試結果

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));
			}
		}
	}

	}


執行結果: 在這裡插入圖片描述 程式流程圖: 在這裡插入圖片描述