使用Java语言解决24点问题

问题描述:

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


算法分析:

首先从控制台输入四个数据存储到数组中,并判断输入的数据的准确(要求数据在1—13之间),定义数组存放四个运算符方便获取,再使用循环嵌套将四个数分别从前至后依次运算,运算中使用equals判断使用的是哪个运算符并保存数据,在得到的所有结果中输出最后结果等于24的结果,并且定义布尔型变量flag判断输入的数字是否可以达到想要的结果,正确即为true,反之为flase。


概要设计:

在这里插入图片描述


测试:

测试用例:6 8 4 4
结果:
在这里插入图片描述


源代码:

package java24dian;

import java.util.Scanner;

public class java24dian {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int shu[] = new int[4];
        //判断输入的数字是否符合要求
        int b;
        System.out.println ("请输入4个(1-13)的数字:");
        for (int i = 0; i < shu.length; i++) {
            b = scan.nextInt ();
            //判断输入的数字是否合法
            if (b <= 0 || b > 13) {
                System.out.println ("您输入的数字不在范围内,请重新输入!");
            } else {
                shu[i] = b;
            }
        }
        //创建字符串存放运算符
        String[] op = {"+","-","*","/"};
        //定义布尔型变量判断是否能实现结果
        boolean flag = false;
        //定义三个变量保存3次计算的结果
        int a1, a2, a3;
        System.out.println("可组成24的所有的组合为:");
        //取出第一个数
        for(int m=0;m<shu.length;m++)
        {
            //取出第二个数
            for(int n=0;n<shu.length;n++)
            {
                //两数不相等
                if(m!=n)
                {
                    //第一个运算符
                    for(int x=0;x< op.length;x++)
                    {
                        a1=yunSuan (shu[m],shu[n],op[x]);
                        //取出第三个数
                        for(int p=0;p<shu.length;p++)
                        {
                            //三数不相等
                            if(p!=m&&p!=n)
                            {
                                //第二个运算符
                                for(int y=0;y< op.length;y++)
                                {
                                    a2=yunSuan (a1,shu[p],op[y]);
                                    //取出第四个数
                                    for(int q=0;q<shu.length;q++)
                                    {
                                        //数字互不相等
                                        if(q!=m&&q!=n&&q!=p)
                                        {
                                            //第三个运算符
                                            for(int z=0;z< op.length;z++)
                                            {
                                                a3=yunSuan (a2,shu[q],op[z]);
                                                if(a3==24)
                                                {
                                                    System.out.println("("+"("+"("+shu[m]+op[x]+shu[n]+")"+op[y]+shu[p]+")"+op[z]+shu[q]+")");
                                                    flag=true;
                                                }

                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (flag == false)
            System.out.println("不能实现24点!");
    }
    public static int yunSuan ( int i, int j, String op ) {
        //使用equals判断运算符是否相等
        if (op.equals ("+")) {
            return i + j;
        } else if (op.equals ("-")) {
            return i - j;
        } else if (op.equals ("*")) {
            return i * j;
        } else {
            return i / j;
        }
    }
}


心得体会:

使用循环嵌套步骤复杂但思路简明,判断该使用哪个运算符时使用了equals()来做比较。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希望小党永远开心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值