使用java实现,随机取4张牌,使用加减乘除得到24的所有可能情况

package com.accp.Test;

public class TreeTest {
	static int num=0;//计算总共有多少种情况
	public static void main(String[] args) {
		/*
		 * 4层for循环获取4张扑克牌所有的可能组合
		 * 将组合存入数组poker
		 */
		for(int i=1;i<=13;i++){
			for(int j=1;j<=13;j++){
				for(int k=1;k<=13;k++){
					for(int m=1;m<=13;m++){
						int[] poker=new int[]{i,j,k,m};
						opertor(poker);
					}
				}
			}
		}
		System.out.println("总共有"+num+"种情况");
	}
	/*
	 * 使用3层for循环来获取运算符的所有组合存入symbolNum数组
	 * 调用symbol方法获得与数字对应的运算符输出
	 */
	public static void opertor(int[] poker){
		double sum=0;
		for(int i=0;i<4;i++){
			double sum1=code(poker[0],poker[1],i);
			for(int j=0;j<4;j++){
				double sum2=code(sum1,poker[2],j);
				for(int k=0;k<4;k++){
					sum=code(sum2,poker[3],k);
					int[] symbolNum={i,j,k};
					String[] symbol=new String[4];
					symbol=symbol(symbolNum);
					if(sum==24){
						num++;
						System.out.println("["+"("+poker[0]+" "+symbol[0]+" "+poker[1]+")"+" "+symbol[1]+" "+poker[2]+"]"+" "+symbol[2]+" "+poker[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]="x";
				break;
			case 3:
				symbol[i]="÷";
				break;
			default:
				break;
			}
		}
		return symbol;
	}
}

你可能感兴趣的:(java算法)