从扑克牌种任取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);
}
}
}
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);
}
}
}
相关文章推荐
- 你有4张卡片,每张卡片从1到9的数字,通过*,/,+, - ,(,)来获得24的值。
- 使用java实现,随机取4张牌,使用加减乘除得到24的所有可能情况
- 计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:
- 这段代码是看 用3 ,3 ,8, 8 四个数通过四种基本运算方式得到24这个值,没啥新意,偶用穷举做的.
- 4个10以内的数字,通过四则运算得到24
- sicily 1050——5个数通过加减乘除运算得到目标数
- 4个10以内的数字,通过四则运算得到24
- 微信之初学者奥义第一篇(数字类型和四则运算)
- 使用“位运算”实现“四则运算”之加减乘除
- 身份证号码的了解------最后一位数字是有前面的十七位数字通过计算得到的
- JavaScript 四则运算(加减乘除小数运算)避免损失精度
- 用位运算实现四则运算之加减乘除
- 正则表达式实现的加减乘除四则运算的计算器
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3)
- 一个非常酷的Js计算器(加减乘除,浮点,以及括号运算,四则混合运算)
- 使用位运算计算加减乘除四则运算
- 只用位运算来实现整数的加减乘除四则运算
- 用位运算实现四则运算之加减乘除
- 算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
- 正整数加减乘除四则混合运算求值方法 java实现