跟女朋友玩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型的,所以除法计算会直接取整,这种结果应该是不可以的,我一时半会也没想到怎么解决,可以在计算的时候加个判断,如果是小数直接忽略,不过这样太麻烦了,不合适的结果直接就能看出来,就先不改进了