每天一道编程题(一)----24点游戏

今天看了一道面试编程的关于24点游戏的,自己想了想,就写了以下的java代码,时间复杂度比较高,暂时还没有想到太好的方法,希望有人能提出更好地方法。

原题是让随机生成4个数,这四个数大于1小于14,然后计算其能否凑成24点。并输出每个数和方法。源代码如下:

public class Test24Point {
	public static float operate(float r1,float r2,int opt){
	
			switch(opt){
			default:
			case 0:return (float)(r1+r2);
			case 1:return (float)r1-r2;
			case 2:return (float)r1*r2;
			case 3:return (float)r1/r2;
		

			}
	}
   public static boolean test(int r1,int r2,int r3,int r4){
	   boolean result=false;
	   float result1=0;
	   float result2=0;
	   float result3=0;
	   int m=0;
	   for(int i=0;i<4;i++){
		
	    	
	    	for(int j=0;j<4;j++){
	    		 
	    		for (int k=0;k<4;k++){
	    		 if(i>1){
	    			 result1=operate((float)r1, (float)r2, i);
	    			if(k>1){
	    				result2=operate(r3, r4,k);
	    				result3=operate((float)result1, (float)result2,j);
	    			}else{
	    				result2=operate((float)result1, (float)r3,j);
	    				result3=operate((float)result2, (float)r4, k);
	    			}
	    		
	    		 }else if(j>1){
	    			 result1=operate((float)r2, (float)r3, j);
	    			 if(k>1){
	    				 result2=operate((float)result1, (float)r4,k);
	    				 result3=operate((float)r1, (float)result2, i);
	    			 }else{
	    				 result2=operate((float)r1,(float)result1,i);
	    				 result3=operate((float)result2,(float)r4,k);
	    			 }
	    		 }else if(k>1){
	    			 result1=operate((float)r3, (float)r4, k);
	    			 result2=operate((float)r1, (float)r2, i);
	    			 result3=operate((float)result1, (float)result2,j);
	    		 }else{
	    			 result1=operate((float)r1, (float)r2, i);
	    			 result2=operate((float)result1, (float)r3, j);
	    			 result3=operate((float)result2, (float)r4, k);
	    		 }
	    			if(result3==24){
	    				System.out.println("各部的操作符分别为:"+i+j+k);
	    				m++;
	    				result=true;
	    			}
	    		}
	    	}
	    }
	   System.out.println("共有"+m+"个"+"可行方案");
	   return result;
	}
   public static void main(String[] args){
	   Random r11=new Random(41);
	   int r1=r11.nextInt(13)+1;
	   System.out.println("我打印出的R1的值为:"+r1);
	   Random r22=new Random(42);
	   int r2=r22.nextInt(13)+1;
	   System.out.println("我打印出的R2的值为:"+r2);
	   Random r33=new Random(43);
	   int r3=r33.nextInt(13)+1;
	   System.out.println("我打印出的R3的值为:"+r3);
	   Random r44=new Random(44);
	   int r4=r44.nextInt(13)+1;
	   System.out.println("我打印出的R4的值为:"+r4);
	   if(test(6, 11, 1, 3)){
		   System.out.println("此随机数可以凑成24点");
	   }else{
		   System.out.println("对不起,没有实现24点");
	   }
	   
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值