`
zhangxiang390
  • 浏览: 217354 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

3388=24及24点游戏的穷举算法

阅读更多

偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么?

package my;

public class DigitalPuzzle {
	private float[] operands=new float[]{3.0f, 3.0f, 8.0f, 8.0f};
	private int[] operators=new int[]{0, 1, 2, 3};//0 1 2 3 stand for + - * /
	private float[][] allSeries=new float[4][4*4*4*4]; //四个操作数所有可能的组合
	private int[][] allOperats=new int[3][4*4*4]; //三个操作符所有可能的组合
	private int validSeriesSum=0; //有效的操作数组合个数
	
	// 穷举所有的操作数排列及操作符排列
	public void init(){
		int i,j,m,n;

		for(i=0;i<4;i++)
			for(j=0;j<4;j++)
				for(m=0;m<4;m++){
					allOperats[0][i*16+j*4+m]=operators[i];
					allOperats[1][i*16+j*4+m]=operators[j];
					allOperats[2][i*16+j*4+m]=operators[m];					
				}
		
		int kk=0;
		for(i=0;i<4;i++)
			for(j=0;j<4;j++)
				for(m=0;m<4;m++)
					for(n=0;n<4;n++)
						if(i!=j && i!=m && i!=n && j!=m && j!=n && m!=n){
							allSeries[0][kk]=operands[i];
							allSeries[1][kk]=operands[j];
							allSeries[2][kk]=operands[m];
							allSeries[3][kk]=operands[n];
							kk++;							
						}
		validSeriesSum=kk;
	}
	
	
	public float Calcu(float op1, float op2, int op){
		switch(op){
		case 0: return op1+op2;
		case 1: return op1-op2;
		case 2: return op1*op2;
		case 3: return op1/op2;
		default:
			return 0.0f;
		}
	}
	
	// 打印计算结果
	public String show(float op[], int opt[], int result){
		String[] opts=new String[opt.length];		
		for(int i=0;i<opt.length;i++)
			switch(opt[i]){
			case 0: opts[i]="+";break;
			case 1: opts[i]="-";break;
			case 2: opts[i]="*";break;
			case 3: opts[i]="/";break;
			default:
				opts[i]="wrong";
			}
		return op[3]+opts[2]+"("+op[2]+opts[1]+"("+op[1]+opts[0]+op[0]+")) = "+result;
	}
	
	// 穷举过程
	public void find(){		
		for(int i=0;i<validSeriesSum;i++)
			for(int j=0;j<4*4*4;j++){				
				float tmp1=Calcu(allSeries[1][i], allSeries[0][i],allOperats[0][j]);
				float tmp2=Calcu(allSeries[2][i], tmp1, allOperats[1][j]);
				float tmp3=Calcu(allSeries[3][i], tmp2, allOperats[2][j]);
				if(Math.abs(tmp3-24.0f)<0.01f)
					System.out.println(show(new float[]{allSeries[0][i],allSeries[1][i],
							allSeries[2][i],allSeries[3][i]},new int[]{allOperats[0][j],
							allOperats[1][j],allOperats[2][j]}, 24));
			}			
	}
	
	public static void main(String[] args){
		DigitalPuzzle dp=new DigitalPuzzle();
		dp.init();
		dp.find();
	}
}
 

打印结果: 8.0/(3.0-(8.0/3.0)) = 24

 

分享到:
评论

相关推荐

    穷举组合法计算24点

    在编程领域,"穷举组合法计算24点"是一个有趣的算法问题,它涉及到数学、逻辑和编程技巧。24点游戏是大家都熟知的一种智力游戏,玩家需要利用四张牌上的数字,通过加减乘除四则运算以及括号来得到结果24。在这个问题...

    C语言24点游戏穷举法

    总结来说,实现C语言的24点游戏穷举法涉及了递归、运算符优先级、中缀转后缀表达式、数学表达式求值等多个核心编程概念,是学习和锻炼C语言能力的好项目。同时,这个过程也涉及到了问题的分解、逻辑思维和算法设计,...

    24点算法(穷举法)

    24点算法是一种基于四则运算的智力游戏,目标是通过加、减、乘、除四种运算符(可能包括括号来改变运算顺序),将给定的四个数字组合成24。这里提到的是使用C++编程语言实现的一种穷举法策略,即尝试所有可能的运算...

    24点游戏的算法及实现

    24点游戏是一种深受人们喜爱的智力挑战游戏,它的目标是通过加、减、乘、除运算,将给出的四个1到13之间的数字组合成24。这个游戏考验玩家的逻辑思维和数学技能。本文将深入探讨24点游戏的算法实现,并提供详细的...

    C++算24点代码穷举实现

    在编程领域,"C++算24点代码穷举实现"是一个典型的数学和算法问题,它涉及到使用C++编程语言来解决24点游戏。24点游戏是一种流行的心算游戏,玩家需要从四张1到13的扑克牌中通过加、减、乘、除运算得出24这个结果。...

    24点算法实现

    给定4个整数,其中每个数字只能使用一次;任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏。这方面的程序很多,一般都是穷举求解。本程序通过递归算法实现实现24点计算,

    穷举(枚举)算法

    在编程和计算机科学中,穷举,又称为枚举算法,是一种基础的解决问题的方法,它通过尝试所有可能的解决方案来找到正确答案。这种方法通常适用于问题的解空间有限且可预测的情况。枚举算法的核心思想是系统地列出所有...

    算法与程序设计:第2章 穷举法与迭代法.ppt

    在程序设计与算法设计的学习过程中,我们通常会接触多种解决问题的方法,其中穷举法与迭代法是两种非常基础且重要的算法设计手段。在算法与程序设计的第2章中,将深入探讨这两种方法的原理、分类以及应用实例。 ...

    纸牌24点游戏模拟(4+2*6+8=24)

    《纸牌24点游戏模拟:C++实现详解》 纸牌24点游戏是一种深受人们喜爱的益智游戏,其规则简单而富有挑战性。玩家需要从一副包含1到9的九张数字牌中随机抽取四张,然后通过加、减、乘、除以及括号的操作,使得四张牌...

    24点扑克游戏算法参考

    "24点扑克游戏"是一种深受人们喜爱的数学智力游戏,目标是通过加减乘除四种运算,将四张扑克牌上的数字组合成24。在这个游戏的背后,隐藏着丰富的算法设计与实现知识,让我们一起来深入探讨。 首先,我们要了解算法...

    24点游戏无重解算法的研究与探讨

    ### 24点游戏无重解算法的研究与探讨 #### 摘要 本文主要针对24点游戏中的“无重解”算法进行深入的研究与探讨。24点游戏是一种非常受欢迎的数字游戏,它的基本玩法是:从一副扑克牌(去掉大小王)中随机抽取四张...

    c#关于24点算法

    24点算法是一种经典的数学游戏,源自中国的扑克牌游戏,目标是通过加减乘除运算,使四张1到13之间的数字牌得出24。在编程领域,我们可以用C#来实现这个算法,将其转化为计算机可以处理的问题。下面将详细探讨如何用...

    穷举法 三八二十四

    “三八二十四”的标签进一步强调了这个问题的特殊性质,即它可能是一个有趣的数学游戏或编程练习,目的是通过实际操作来理解和掌握穷举法的运用。提供的压缩包文件名“三八二十四”可能包含的就是上述的源代码文件...

    24点算法及程序

    `24点算法及程序.exe`是编译后的可执行文件,可以直接运行体验24点游戏的完整功能。 总的来说,24点算法不仅是一场数学游戏,也是一种编程挑战。通过理解并实现这个算法,可以深化对递归、回溯和运算符优先级等编程...

    24点算法,不正确你抽我

    24点算法,穷举12288种可能,不正确你抽我。

    算24点游戏,智力游戏

    《算24点游戏:智力挑战与算法解析》 算24点游戏,作为一个历史悠久的智力游戏,深受人们喜爱,尤其对于提升心算能力和逻辑思维能力具有显著效果。游戏的基本规则是,从1到13这13个数字中随机抽取四个,通过加、减...

    Delphi算法 - 快算24点源码..rar

    在编程领域,尤其是在游戏算法设计中,"快算24点"是一个经典的数学问题,它涉及到数字组合、算术运算以及逻辑判断等多个方面。本篇文章将深入探讨使用Delphi语言实现的快算24点算法,帮助读者理解其背后的逻辑和编程...

    游戏开发常用算法

    ### 游戏开发常用算法详解 #### 一、算法与数据结构基础 在游戏开发过程中,算法和数据结构是至关重要的。算法是指解决问题的一系列步骤,而数据结构则是组织和管理数据的方式。良好的算法和数据结构能够提高游戏...

    关于二十四点游戏的编程思路与基本算法

    ### 关于二十四点游戏的编程思路与基本算法 #### 一、引言 二十四点游戏是一种经典的数学益智游戏,玩家需要使用加减乘除四种运算符号和括号,将四张扑克牌上的数字组合成结果为24的数学表达式。这款游戏不仅能...

    javascript24点游戏源码

    JavaScript 24点游戏是一种基于数字的益智游戏,目标是通过加、减、乘、除运算,使得四个给定的数字得出结果为24。这款游戏的源码可以帮助我们深入理解JavaScript编程语言,特别是关于算法设计和数学逻辑的应用。...

Global site tag (gtag.js) - Google Analytics