最簡單的計算24點

跟女朋友玩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型的,所以除法計算會直接取整,這種結果應該是不可以的,我一時半會也沒想到怎麼解決,可以在計算的時候加個判斷,如果是小數直接忽略,不過這樣太麻煩了,不合適的結果直接就能看出來,就先不改進了

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章