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