⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 do24.java

📁 实现4个数的24点计算 也可输入4个1-9的数字
💻 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 + -