已知一副扑克牌有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的方法相关推荐

  1. 速算24点java_24点速算游戏 Java 代码

    import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.H ...

  2. 计算机游戏纸牌技巧,扑克牌游戏“算24”的程序解法

    一种有趣的扑克牌游戏–算24 众多的扑克牌游戏中,算24是一种不错的锻炼反应力和计算能力的智力游戏,游戏规则大致是这样:从去掉大小王的一副扑克中任意抽取四张,读取上面的数字(其中A算1,2-10就是2 ...

  3. 数学速算法_小学数学速算技巧全收录,寒假全面提升!

    小编说: 关注"学习方法报"免费获取更多学习干货,助你快速提分. 想订阅报纸的各位童鞋请点击底部菜单--"微商城" 查询答案的各位童鞋请点击底部菜单--&quo ...

  4. java跨库join方案_集算器协助java处理多样性数据源之跨库关联

    Java的数据计算类库RowSet提供了JoinRowSet和FilteredRowSet类,可以进行跨库的关联计算,但是有很多局限.首先,JoinRowSet只支持inner join,不支持out ...

  5. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  6. 掌握java_如何才算掌握Java,大家都掌握到什么程度

    如何才算掌握Java SE java SE基础课程在朗沃算是学完了,但真正的掌握了么?如何才算掌握了呢?目前已经进入了JavaWEB阶段的项目阶段,把这个问题提出来,是很好的一个时间,那么有没有一些参 ...

  7. java 余弦定理_Java實現余弦定理計算文本相似度

    相似度度量(Similarity),即計算個體間的相似程度,相似度度量的值越小,說明個體間相似度越小,相似度的值越大說明個體差異越大. 對於多個不同的文本或者短文本對話消息要來計算他們之間的相似度如何 ...

  8. 生成小学加减口算题JAVA算法

    生成小学加减口算题JAVA算法 package com.jianchi.fsp.generationchildrenarithmetic;import java.io.Serializable; im ...

  9. 速学堂(java)第八章编程题答案自写

    速学堂(java)第八章编程题答案自写 1. 验证键盘输入的用户名不能为空,长度大于6,不能有数字. 提示:使用字符串String类的相关方法完成可以使用Scanner的nextLine()方法,该方 ...

最新文章

  1. 好工作为什么会与你擦肩而过?
  2. 玩转CSS选择器(一) 之 使用方法介绍
  3. 函数dup和dup2
  4. xman的思维导图快捷键_一图胜千言,免费的多人协作思维导图工具,推荐收藏值得拥有哦...
  5. AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志
  6. docker如何安装vim和yum命令?
  7. 《JQuery 能干点啥~》第7讲 层级选择器_2
  8. Codeforces Round #302 (Div. 2)
  9. TZOJ 数据结构期末历年题目
  10. python模板匹配_python实现模板匹配
  11. 操作系统的起源与发展历程
  12. 115网盘摇奖的位置变了~
  13. 搜狗细胞词库解析(仅提取词和词频)
  14. 凡人修仙传显示无法连接服务器,凡人修仙传进不去 无法连接服务器 登陆失败 闪退 黑屏...
  15. python 实现维基百科六度分隔原理
  16. RC电路 波形分析
  17. 不得不说的Telegram : 币圈与链圈的微信
  18. python 协程库_python 协程库gevent学习--gevent数据结构及实战(四)
  19. 软考高项——配置管理
  20. iOS 百思不得姐 项目

热门文章

  1. 在windows server 2012R2中安装域服务
  2. 学习 LLVM(14) SmallPtrSet
  3. 你不是在拯救世界就是在拯救世界的路上
  4. 承载千万级并发的分布式系统架构设计思想
  5. linux命令之修改系统允许进程打开文件描述符限制-ulimit
  6. c/c++实现一个密集型server/socket多路复用select
  7. JSP中include指令的乱码问题
  8. c语言随机产生100个字母,C语言实现产生100以内的随机数做加减运算
  9. warning: implicit declaration of function导致core
  10. 内核线程、轻量级进程、用户线程