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

	}


运行结果:
24点游戏是经典的纸牌益智游戏 java 程序 源代码 测试结果
程序流程图:
24点游戏是经典的纸牌益智游戏 java 程序 源代码 测试结果

相关文章: