java速算24,Java扑克牌速算24的方法
已知一副撲克牌有54張,去除大王和小王,剩余52張。在其中隨機抽取4張牌,利用加減乘除進行計算得到24. 從A到10,他們的值分別為1到10. 從J到K,他們對應的值是減去10以后的值。編寫程序生成一副撲克牌,隨機抽取4張,進行計算是否能得到24. 如果可以,列出可能的計算表達式,可能有多種計算形式。
主要思想就是先生成除去大小王的52張撲克牌,然后從中隨機抽取四張。接著用排列組合的方式找到能計算得到24的表達式。
package Poker;
import java.util.Random;
import java.util.Stack;
public class Poker {
static int count = 0;
static int count_2 = 0;
public static Stack stack = new Stack();
public static Stack stack_temp = new Stack();
public static Stack stack_collection = new Stack();
public static void main(String[] args) {
System.out.println("Poker World");
// 生成撲克牌
int poker[][] = new int[4][13];
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 13; j++) {
if(j + 1 < 11) {
poker[i][j] = j+1;
}
else {
poker[i][j] = j-9;
}
}
}
Random r = new Random();
int randomPoker[] = new int[4];
for(int i = 0; i < 4; i++) {
randomPoker[i] = poker[r.nextInt(3)][r.nextInt(12)];
stack_temp.add(randomPoker[i]);
}
System.out.print("抽到的撲克牌:");
for(int element: randomPoker) {
System.out.printf("%d ", element);
}
System.out.print("\n");
order(randomPoker, 4, 0);
//System.out.printf("%d\n",count_2);
if(count != 0) {
System.out.printf("共有%d種計算方法", count);
}
else {
System.out.print("無法計算得到24");
}
}
private static void order(int[] poker, int targ, int cur) {
// TODO Auto-generated method stub
if(cur == targ) {
String str = stack.toString();
if(!stack_collection.contains(str)) {
stack_collection.add(str);
count_2 += 1;
int new_poker[] = new int[4];
for(int i = 0; i < 4; i++) {
new_poker[i] = stack.pop();
}
for(int i = 3; i >= 0; i--) {
stack.push(new_poker[i]);
}
do24(new_poker);
}
return;
}
for(int i = 0; i < poker.length; i++) {
if(stack_temp.contains(poker[i])) {
stack.add(poker[i]);
for(int j = 0; j < stack_temp.size(); j++) {
if(stack_temp.get(j) == poker[i]) {
stack_temp.remove(j);
break;
}
}
order(poker, targ, cur+1);
stack.pop();
stack_temp.add(poker[i]);
}
}
}
public static void do24(int[] poker){
// 四個數字中間有三個運算符,因此用三重循環遍歷。其中0表示+,1表示-,2表示x,3表示÷
int test[] = {1,2,3,4};
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
operate(poker,i,j,k);
//operate(test,i,j,k);
}
}
}
}
/*
* 分類討論
*/
public static void operate(int[] poker, int op1, int op2, int op3) {
int num1 = poker[0];
int num2 = poker[1];
int num3 = poker[2];
int num4 = poker[3];
if((cal(cal(cal(num1,num2,op1),num3,op2),num4,op3) == 24)) {
if((((op2 == 0) || (op2 == 1))&&((op3 == 0) || (op3 == 1)))||((op2 != 0) && (op2 != 1))) {
System.out.println("("+num1+symbol(op1)+num2+")"+symbol(op2)+num3+symbol(op3)+num4);
count++;
}
}
else if(cal(cal(num1,cal(num2,num3,op2),op1),num4,op3) == 24) {
if((((op1 == 0) || (op1 == 1))&&((op3 == 0) || (op3 == 1)))||((op1 != 0) && (op1 != 1))) {
System.out.println(num1+symbol(op1)+"("+num2+symbol(op2)+num3+")"+symbol(op3)+num4);
count++;
}
else {
System.out.println("["+num1+symbol(op1)+"("+num2+symbol(op2)+num3+")]"+symbol(op3)+num4);
count++;
}
}
else if(cal(cal(num1,num2,op1),cal(num3,num4,op3),op2) == 24) {
if((((op1 == 0) || (op1 == 1))&&((op2 == 0) || (op2 == 1)))||((op1 != 0) && (op1 != 1))) {
System.out.println(num1+symbol(op1)+num2+symbol(op2)+"("+num3+symbol(op3)+num4+")");
count++;
}
else {
System.out.println("("+num1+symbol(op1)+num2+")"+symbol(op2)+"("+num3+symbol(op3)+num4+")");
count++;
}
}
else if(cal(cal(cal(num1,num2,op1),num3,op2),num4,op3) == 24) {
if((((op1 == 0) || (op1 == 1))&&((op2 == 0) || (op2 == 1)))||((op1 != 0) && (op1 != 1))) {
System.out.println("("+num1+symbol(op1)+num2+symbol(op2)+num3+")"+symbol(op3)+num4);
count++;
}
else {
System.out.println("[("+num1+symbol(op1)+num2+")"+symbol(op2)+num3+"]"+symbol(op3)+num4);
count++;
}
}
else if(cal(num1,cal(cal(num2,num3,op2),num4,op3),op1) == 24) {
if((((op2 == 0) || (op2 == 1))&&((op3 == 0) || (op3 == 1)))||((op2 != 0) && (op2 != 1))) {
System.out.println(num1+symbol(op1)+"("+num2+symbol(op2)+num3+symbol(op3)+num4+")");
count++;
}
else {
System.out.println(num1+symbol(op1)+"[("+num2+symbol(op2)+num3+")"+symbol(op3)+num4+"]");
count++;
}
}
else if(cal(num1,cal(num2,cal(num3,num4,op3),op2),op1) == 24) {
System.out.println(num1+symbol(op1)+"["+num2+symbol(op2)+"("+num3+symbol(op3)+num4+")]");
count++;
}
}
/*
* 按順序計算
*/
public static double cal(double num1,double num2,int num){
double sum=0.0;
switch(num) {
case 0:
sum = num1 + num2;
break;
case 1:
sum = num1 - num2;
break;
case 2:
sum = num1 * num2;
break;
case 3:
if(num1 % num2 == 0) {
sum = num1 / num2;
}
else {
sum = 999;
}
break;
default:
break;
}
return sum;
}
/*
* 將代表計算符號的數字轉換成字符存入String數組并返回
*/
public static String symbol(int symbolNum){
String symbol = "";
switch (symbolNum) {
case 0:
symbol="+";
break;
case 1:
symbol="-";
break;
case 2:
symbol="x";
break;
case 3:
symbol="÷";
break;
default:
break;
}
return symbol;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持聚米學院。
總結
以上是生活随笔為你收集整理的java速算24,Java扑克牌速算24的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php职能等级,php如何设置报错级别
- 下一篇: php数组中插入数值,php中如何在数组