📄 do24.java
字号:
/**
* @(#)24.java
*
*
* @author
* @version 1.00 2007/4/24
*/
public class do24 {
private double sum1,sum2,sum3;
private double sign1,sign2,flag,cpr;
private char[] sigle=new char [6];
protected double [] num=new double [4];
private double [] rem=new double [24];
protected String s;
public do24() {
}
public int judge()//四个数字的排列
{
double res;
int judge=0;
for (int a=0;a<4;a++)
{
if(judge==1) break;//得到一个结果跳出循环
for (int b=0;b<4;b++)
{
if(judge==1) break;
if (b!=a)
for (int c=0;c<4;c++)
{
if(judge==1) break;
if (c!=a && c!=b)
for (int d=0;d<4;d++)
if (d!=a && d!=b && d!=c)
{
cpr=num[a]*1000+num[b]*100+num[c]*10+num[d];
for(int m=0;m<24;m++)
{
if(rem[m]==cpr)//出现过这样的排列,则跳出本次循环
break;
if(rem[m]==0)
{
rem[m]=cpr;
res=treat(num[a],num[b],num[c],num[d]);
if(res==1)
judge=1;
break;
}
}
}
}
}
}
if(judge==0)
System.out.println("无解");
return judge;
}
public int treat(double a,double b,double c,double d)
{
int tem=0;
try{
for (int i=0;i<4;i++)
{
if(tem>0)break;//得到一个结果跳出循环
for (int j=0;j<6;j++)
{
if(tem>0)break;
for (int k=0;k<6;k++)
{
if ((!(i==3 && b==0)) && (!(j==3 && c==0)) && (!(k==3 && d==0)))//除数不为0
{
sum1=format(i,a,b);//任取两个操作数进行各运算
sum2=format(j,sum1,c);//将结果与第三个数进行各运算
if(sum1<0||sum2<0)
break;//出现负数,停止计算
sum3=format(k,sum2,d);
if (Math.abs(sum3-24)<0.000001)
{
tem++;
Print(1,i,j,k,a,b,c,d);
break;
}
//(a*b)*(c*d)的情况
if(k==4||k==5)
continue;
sum1=format(i,a,b);
sum2=format(j,c,d);
if(sum1<0||sum2<0)
continue;
sum3=format(k,sum1,sum2);
if (Math.abs(sum3-24)<0.000001)
{
tem++;
Print(2,i,j,k,a,b,c,d);
}
if(tem>0)
break;
}
}
}
}
}
catch (Exception e)
{
}
if (tem==1)
return 1;
else
return 0;
}
public double format(int flag,double m,double n)//返回两操作数运算结果
{
if (flag==0)
return (m+n);
if (flag==1)
return (m-n);
if (flag==2)
return (m*n);
if (flag==3)
if (n==0)
return -1;
else
return (m/n);
if (flag==4)
return (n-m);
if (flag==5)
if (m==0)
return -1;
else
return (n/m);
return 0;
}
public void Print(int type,int i,int j,int k,double a,double b,double c,double d)
{
sigle[0]='+';
sigle[1]='-';
sigle[2]='*';
sigle[3]='/';
sigle[4]='-';
sigle[5]='/';
if(type==1)
{
if(i==4||i==5)
{
if((j==4 || j==5)&&(k==4 || k==5))
{
s=(int)d+" "+sigle[k]+" "+"("+(int)c+" "+sigle[j]+" "+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+")"+"=24";
System.out.println(s);
}
else if(j==4||j==5)
{
s="("+(int)c+" "+sigle[j]+" "+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+")"+sigle[k]+" "+(int)d+" "+"=24";
System.out.println(s);
}
else if (k==4 || k==5)
{
s=(int)d+" "+sigle[k]+" "+"("+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+sigle[j]+" "+(int)c+" "+")"+"=24";
System.out.println(s);
}
else
{
s="("+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+sigle[j]+" "+(int)c+" "+")"+sigle[k]+" "+(int)d+" "+"=24";
System.out.println(s);
}
}
else
{
if((j==4 || j==5)&&(k==4 || k==5))
{
s=(int)d+" "+sigle[k]+" "+"("+(int)c+" "+sigle[j]+" "+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+")"+"=24";
System.out.println(s);
}
else if(j==4||j==5)
{
s="("+(int)c+" "+sigle[j]+" "+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+")"+sigle[k]+" "+(int)d+" "+"=24";
System.out.println(s);
}
else if (k==4 || k==5)
{
s=(int)d+" "+sigle[k]+" "+"("+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+sigle[j]+" "+(int)c+" "+")"+"=24";
System.out.println(s);
}
else
{
s="("+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+sigle[j]+" "+(int)c+" "+")"+sigle[k]+" "+(int)d+" "+"=24";
System.out.println(s);
}
}
}
else if(type==2)
{
if(i==4 || i==5)
{
if((j==4 || j==5)&&(k==4 || k==5))
{
s="("+(int)d+" "+sigle[j]+" "+(int)c+" "+")"+sigle[k]+" "+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+"=24";
System.out.println(s);
}
else if(j==4||j==5)
{
s="("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+sigle[k]+" "+"("+(int)d+" "+sigle[j]+" "+(int)c+" "+")"+"=24";
System.out.println(s);
}
else if (k==4 || k==5)
{
s="("+(int)c+" "+sigle[j]+" "+(int)d+" "+")"+sigle[k]+" "+"("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+"=24";
System.out.println(s);
}
else
{
s="("+(int)b+" "+sigle[i]+" "+(int)a+" "+")"+sigle[k]+" "+"("+(int)c+" "+sigle[j]+" "+(int)d+" "+")"+"=24";
System.out.println(s);
}
}
else
{
if((j==4 || j==5)&&(k==4 || k==5))
{
s="("+(int)d+" "+sigle[j]+" "+(int)c+" "+")"+sigle[k]+" "+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+"=24";
System.out.println(s);
}
else if(j==4||j==5)
{
s="("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+sigle[k]+" "+"("+(int)d+" "+sigle[j]+" "+(int)c+" "+")"+"=24";
System.out.println(s);
}
else if (k==4 || k==5)
{
s="("+(int)c+" "+sigle[j]+" "+(int)d+" "+")"+sigle[k]+" "+"("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+"=24";
System.out.println(s);
}
else
{
s="("+(int)a+" "+sigle[i]+" "+(int)b+" "+")"+sigle[k]+" "+"("+(int)c+" "+sigle[j]+" "+(int)d+" "+")"+"=24";
System.out.println(s);
}
}
}
}
public static void main(String[] args)
{
do24 test =new do24();
for(int i=0;i<4;i++)
{
System.out.println("please input a number:");
test.num[i]=MyInput.readInt();
}
test.judge();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -