您的位置:首页 > 其它

从扑克牌种任取4张,通过加减乘除四则运算得到数字24

2013-04-30 19:25 429 查看
import java.util.HashSet;

import java.util.Iterator;

import java.util.Scanner;

import java.util.Set;

/*

* 从一副扑克牌中,任取4张。2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算

要求通过加减乘除四则运算得到数字 24。

本程序可以随机抽取纸牌,并用试探法求解。

*/

public class Test108 {

private static Set<String> s24 = new HashSet<String>();

public static void main(String[] args) {

char c[] = {'2','3','4','5','6','7','8','9','T','J','Q','K','A'};

System.out.println("随即抽取4张纸牌:");

/*int num[] = new int[4];

for (int i = 0; i < num.length; i++) {

char temp=c[(int) (Math.random()*13)];

if(temp=='T'){

num[i] = 10;

}else if(temp=='J'||temp=='Q'||temp=='K'||temp=='A'){

num[i] = 1;

}else{

num[i] = temp-'0';

}

}*/

int num2[] = {3,5,1,10};

pailie(num2,0);

System.out.println(num2[0]+" "+num2[1]+" "+num2[2]+" "+num2[3]);

Iterator<String> tor = s24.iterator();

while(tor.hasNext()){

System.out.println(tor.next());

}

}

//因为要列举出所有情况 所以这4个数不同的组合也要列举出来 然后每组4个数 不停的去做+-*/运算

public static void pailie(int[] num,int index){

if(index==num.length){

f(num,0,0,"","");

//System.out.println(num[0]+" "+num[1]+" "+num[2]+" "+num[3]);

}else if(index<num.length){

for (int i = index; i < num.length; i++) {

int temp = num[index];

num[index] = num[i];

num[i] = temp;

pailie(num,index+1);

temp = num[index];

num[index] = num[i];

num[i] = temp;

}

}else{

return;

}

}

//以下代码则是例举出当前顺序的4个数 +-*/是否为24点 感觉相当于全排列

public static void f(int[] num,int count,double sum,String s,String s2){

if(count==4){

if(sum==24){

s24.add(s2);

//System.out.println(s2);

}

}else{

if(count==0){

s2+=num[count];

sum = num[count++];

}else{

s2+=s+num[count];

if(s.equals("+")){

if(count<=2){//如果当前第1个或第2个是加减

s2 ="("+s2+")";

}

sum+=num[count++];

}else if(s.equals("-")){

if(count<=2){//如果当前第1个或第2个是加减

s2 ="("+s2+")";

}

sum-=num[count++];

}else if(s.equals("*")){

sum*=(num[count++]*1.0);

}else if(s.equals("/")){

sum/=(num[count++]*1.0);

}

}

f(num, count, sum, "+",s2);

f(num, count, sum, "-",s2);

f(num, count, sum, "*",s2);

f(num, count, sum, "/",s2);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐