最简单的计算24点

当与女友玩24点游戏遇到困难时,作者决定编写代码来辅助计算。虽然代码存在整数除法导致可能无法得到正确结果的问题,但作者认为可以直接通过观察结果是否为整数来判断是否为有效答案,暂时未对此进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跟女朋友玩24点,碰到两个人都算不出来,又不知道到底能不能算怎么办呢,于是就自己写个代码看看是否有结果。
废话不多说,直接上代码

package com.practice;

import java.util.*;

public class Main {
    public static int operate(int j,int k,String l) {
        if(l=="+")
            return (j+k);
        else if(l=="-")
            return (j-k);
        else if(l=="*")
            return (j*k);
        else
            return (j/k);
    }
    public static void result(int a,int b,int c,int d) {
        int t=0;         //判断能否实现24点
        int[] sj=new int[4];//定义存放数据的数组
        sj[0]=a;
        sj[1]=b;
        sj[2]=c;
        sj[3]=d;           //存放数据
        String ysf[]= {"+","-","*","/"};  //存放运算符
        int result1=0,result2=0,result3=0;             //存放结果
        for(int m=0;m<4;m++)  //计算第一个数
        {
            for(int n=0;n<4;n++) //计算第二个数
            {
                if(m!=n) //防止数据重复
                {
                    for(int x=0;x<4;x++) //第一个运算符
                    {
                        result1=operate(sj[m],sj[n],ysf[x]);                  //存放第一个结果
                        for(int p=0;p<4;p++) //计算第三个数
                        {
                            if(p!=m&&p!=n)  //防止数据重复
                            {
                                for(int y=0;y<4;y++) //第二个运算符
                                {
                                    result2=operate(result1,sj[p],ysf[y]);        //存放第二个结果
                                    for(int q=0;q<4;q++) //计算第四个数
                                    {
                                        if(q!=m&&q!=n&&q!=p)  //防止数据重复
                                        {
                                            for(int z=0;z<4;z++) //第三个运算符
                                            {
                                                result3=operate(result2,sj[q],ysf[z]); //存放第三个结果
                                                if(result3==24)
                                                {
                                                    System.out.println("("+"("+"("+sj[m]+ysf[x]+sj[n]+")"+ysf[y]+sj[p]+")"+ysf[z]+sj[q]+")");
                                                    t=1;
                                                }

                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if(t==0)
            System.out.println("不能实现24点!");
    }
    public static void main(String[] args)  {
        for (int j = 0;j< 999;j++){
            Scanner scanner = new Scanner(System.in);
            int a[] = new int[4];
            for (int i = 0; i< a.length;i++){
                System.out.println("请输入第"+i+"个数:");
                a[i] = scanner.nextInt();
            }
            result(a[0],a[1],a[2],a[3]);
        }
    }
}

有个BUG就是由于都是int型的,所以除法计算会直接取整,这种结果应该是不可以的,我一时半会也没想到怎么解决,可以在计算的时候加个判断,如果是小数直接忽略,不过这样太麻烦了,不合适的结果直接就能看出来,就先不改进了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小苗爸爸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值