Java实现图灵机XN*2的模拟

标题:24点小游戏

题目要求:

从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。

算法分析:

((1)先利用Random随机在1-13中选出四个数字;
(2)写一个方法text(),其中包含两个数字的加减乘除四种计算结果;
(3)再写一个calculate(),调用text()函数写下的五种公式((a#b)#c)#d,(a#(b#c))#d,a#((b#c)#d),a#(b#(c#d)),(a#b)#(c#d);
(4)写出getnum()函数,将四个随机数放入calculate中进行匹配是否等于24,若等于则输入此式子,若不匹配则不输出。
(5)若没有相匹配的式子则输出这组随机数不能组成24点。

流程图

mian
text

源代码


```javascript
public class Calculate {
   String [] symbol = new String[]{"+","-","*","/"};
    int flag = 1;
    //表达出每种运算符的计算情况
    float text(float x,float y,int flag){
        float s=0;
        switch (flag){
            case 0:
                s = x+y;
                break;
            case 1:
                s = x-y;
                break;
            case 2:
                s =x*y;
                break;
            case 3:
                s = x/y;
                break;
        }
        return s;
    }
    //((ab)c)d
    float calculatA(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
        float i = text(a,b,symbol1);
        float j = text(i,c,symbol2);
        float k = text(j,d,symbol3);
        return k;
    }
    //(a(bc))d
    float calculatB(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
        float i = text(b,c,symbol2);
        float j = text(a,i,symbol1);
        float k = text(j,d,symbol3);
        return k;
    }
    //a(b(cd))
    float calculatC(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
        float i = text(c,d,symbol3);
        float j = text(b,i,symbol2);
        float k = text(a,j,symbol1);
        return k;
    }
    //a((bc)d)
    float calculatD(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3){
        float i = text(b,c,symbol1);
        float j = text(i,d,symbol2);
        float k = text(a,j,symbol3);
        return k;
    }
    //(ab)(cd)
    float calculatE(float a,float b,float c,float d,int symbol1,int symbol2 ,int symbol3) {
        float i = text(a, b, symbol1);
        float j = text(c, d, symbol2);
        float k = text(i, j, symbol3);
        return k;
    }

    float getNum(int a,int b,int c,int d){
        int symbol1,symbol2,symbol3;
        int cc = 0;
        for(symbol1=0;symbol1<4;symbol1++) {
            for (symbol2 = 0; symbol2 < 4; symbol2++) {
                for (symbol3 = 0; symbol3 < 4; symbol3++) {
                    if(calculatA(a,b,c,d,symbol1,symbol2,symbol3)==24) {
                        System.out.println("((" + a + symbol[symbol1] + b + ")" + symbol[symbol2] + c + ")" + symbol[symbol3] + d + "=24");
                        cc=1;
                    }
                    else
                        if(calculatB(a,b,c,d,symbol1,symbol2,symbol3)==24) {
                        System.out.println("(" + a + symbol[symbol1] + "(" + b + symbol[symbol2] + c + "))" + symbol[symbol3] + d + "=24");
                        cc = 1;
                    }
                    else
                        if(calculatC(a,b,c,d,symbol1,symbol2,symbol3)==24) {
                        System.out.println(a + symbol[symbol1] + "(" + b + symbol[symbol2] +"("+c + symbol[symbol3] + d + "))" + "=24");
                        cc = 1;
                    }
                    else
                        if(calculatD(a,b,c,d,symbol1,symbol2,symbol3)==24) {
                        System.out.println(a + symbol[symbol1] + "((" + b + symbol[symbol2] + c + ")" + symbol[symbol3] + d + ")" + "=24");
                        cc = 1;
                    }
                    else
                        if(calculatE(a,b,c,d,symbol1,symbol2,symbol3)==24) {
                            System.out.println("(" + a + symbol[symbol1] + b + ")" + symbol[symbol2] + "(" + c + symbol[symbol3] + d + ")" + "=24");
                            cc = 1;
                        }
                }
            }
        }
        return cc;
    }
}


import java.util.Random;

public class Twentytwo {
    public static void main(String[] args) {
        System.out.println("******24点小游戏*****");
        Random r = new Random();
        int [] array = new int[4];
        System.out.println("随机生成的四张扑克牌点数为:");
        for(int i = 0; i<4;i++){
            array[i]=r.nextInt(13)+1;
            System.out.print(array[i]+" ");
        }
        System.out.println();
        float cc=0;
        Calculate calculate = new Calculate();
        cc=calculate.getNum(array[0],array[1],array[2],array[3]);
        if(cc!=1){
            System.out.println("这组数据不能组成24点");
        }
    }
}

测试

在这里插入图片描述
在这里插入图片描述

调式

在这里插入图片描述

运行结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值