偶尔看到一题:用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。在这个问题...
总结来说,实现C语言的24点游戏穷举法涉及了递归、运算符优先级、中缀转后缀表达式、数学表达式求值等多个核心编程概念,是学习和锻炼C语言能力的好项目。同时,这个过程也涉及到了问题的分解、逻辑思维和算法设计,...
24点算法是一种基于四则运算的智力游戏,目标是通过加、减、乘、除四种运算符(可能包括括号来改变运算顺序),将给定的四个数字组合成24。这里提到的是使用C++编程语言实现的一种穷举法策略,即尝试所有可能的运算...
24点游戏是一种深受人们喜爱的智力挑战游戏,它的目标是通过加、减、乘、除运算,将给出的四个1到13之间的数字组合成24。这个游戏考验玩家的逻辑思维和数学技能。本文将深入探讨24点游戏的算法实现,并提供详细的...
在编程领域,"C++算24点代码穷举实现"是一个典型的数学和算法问题,它涉及到使用C++编程语言来解决24点游戏。24点游戏是一种流行的心算游戏,玩家需要从四张1到13的扑克牌中通过加、减、乘、除运算得出24这个结果。...
给定4个整数,其中每个数字只能使用一次;任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏。这方面的程序很多,一般都是穷举求解。本程序通过递归算法实现实现24点计算,
在编程和计算机科学中,穷举,又称为枚举算法,是一种基础的解决问题的方法,它通过尝试所有可能的解决方案来找到正确答案。这种方法通常适用于问题的解空间有限且可预测的情况。枚举算法的核心思想是系统地列出所有...
在程序设计与算法设计的学习过程中,我们通常会接触多种解决问题的方法,其中穷举法与迭代法是两种非常基础且重要的算法设计手段。在算法与程序设计的第2章中,将深入探讨这两种方法的原理、分类以及应用实例。 ...
《纸牌24点游戏模拟:C++实现详解》 纸牌24点游戏是一种深受人们喜爱的益智游戏,其规则简单而富有挑战性。玩家需要从一副包含1到9的九张数字牌中随机抽取四张,然后通过加、减、乘、除以及括号的操作,使得四张牌...
"24点扑克游戏"是一种深受人们喜爱的数学智力游戏,目标是通过加减乘除四种运算,将四张扑克牌上的数字组合成24。在这个游戏的背后,隐藏着丰富的算法设计与实现知识,让我们一起来深入探讨。 首先,我们要了解算法...
### 24点游戏无重解算法的研究与探讨 #### 摘要 本文主要针对24点游戏中的“无重解”算法进行深入的研究与探讨。24点游戏是一种非常受欢迎的数字游戏,它的基本玩法是:从一副扑克牌(去掉大小王)中随机抽取四张...
24点算法是一种经典的数学游戏,源自中国的扑克牌游戏,目标是通过加减乘除运算,使四张1到13之间的数字牌得出24。在编程领域,我们可以用C#来实现这个算法,将其转化为计算机可以处理的问题。下面将详细探讨如何用...
“三八二十四”的标签进一步强调了这个问题的特殊性质,即它可能是一个有趣的数学游戏或编程练习,目的是通过实际操作来理解和掌握穷举法的运用。提供的压缩包文件名“三八二十四”可能包含的就是上述的源代码文件...
`24点算法及程序.exe`是编译后的可执行文件,可以直接运行体验24点游戏的完整功能。 总的来说,24点算法不仅是一场数学游戏,也是一种编程挑战。通过理解并实现这个算法,可以深化对递归、回溯和运算符优先级等编程...
24点算法,穷举12288种可能,不正确你抽我。
《算24点游戏:智力挑战与算法解析》 算24点游戏,作为一个历史悠久的智力游戏,深受人们喜爱,尤其对于提升心算能力和逻辑思维能力具有显著效果。游戏的基本规则是,从1到13这13个数字中随机抽取四个,通过加、减...
在编程领域,尤其是在游戏算法设计中,"快算24点"是一个经典的数学问题,它涉及到数字组合、算术运算以及逻辑判断等多个方面。本篇文章将深入探讨使用Delphi语言实现的快算24点算法,帮助读者理解其背后的逻辑和编程...
### 游戏开发常用算法详解 #### 一、算法与数据结构基础 在游戏开发过程中,算法和数据结构是至关重要的。算法是指解决问题的一系列步骤,而数据结构则是组织和管理数据的方式。良好的算法和数据结构能够提高游戏...
### 关于二十四点游戏的编程思路与基本算法 #### 一、引言 二十四点游戏是一种经典的数学益智游戏,玩家需要使用加减乘除四种运算符号和括号,将四张扑克牌上的数字组合成结果为24的数学表达式。这款游戏不仅能...
JavaScript 24点游戏是一种基于数字的益智游戏,目标是通过加、减、乘、除运算,使得四个给定的数字得出结果为24。这款游戏的源码可以帮助我们深入理解JavaScript编程语言,特别是关于算法设计和数学逻辑的应用。...