根据24点算法游戏算法谁知道

最重要的规则: (1) 不要. (2) 当你想退出的时候,点击 "结束"。
以上规则的 (提示, 为了科学).
次24点游戏已经被解决过了, 开始于.
你的浏览器不支持 html5, 你需要一个新的浏览器, 推荐 Firefox 和 Chrome.
本月20名最高得分
(有时间限制)博客分类:
偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么?
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];
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];
validSeriesSum=
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;
return 0.0f;
// 打印计算结果
public String show(float op[], int opt[], int result){
String[] opts=new String[opt.length];
for(int i=0;i&opt.i++)
switch(opt[i]){
case 0: opts[i]="+";
case 1: opts[i]="-";
case 2: opts[i]="*";
case 3: opts[i]="/";
opts[i]="wrong";
return op[3]+opts[2]+"("+op[2]+opts[1]+"("+op[1]+opts[0]+op[0]+")) = "+
// 穷举过程
public void find(){
for(int i=0;i&validSeriesSi++)
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
zhangxiang390
浏览: 169100 次
来自: 武汉
thebye85 写道houwen 写道 脑袋雷劈的 写道如果 ...
houwen 写道 脑袋雷劈的 写道如果这个appender中 ...
很好的文章,虽然少,但很精练。
其实你还少了activexAp ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'24点游戏的核心算法
招聘信息:
& 24 点游戏,就是在给定的几个数字之间加入数学运算符号,使最终结果等于 24,如下图所示
算法的思路是:
1. 考虑没有括号的情况
运算符为+/-时将数字入栈,运算符入另一栈; 否则pop出栈顶数字与当前数字进行运算,结果入栈
扫描结束后将顺序取出数字和运算符计算
2. 遇到括号时递归,拿到结果进入第一步的运算
appdelegate.m
int x[100];//保存四个数的所有组合 int arrange[100][100];//保存读入的四个数 int num[100];//标记该数是否被访问过 int a[100] = {0}; char sym[5]={'0','+','-','*','/'};//保存使用的算术运算符 int bol[100];// 标记运算符是否被访问过 int b[100]={0}; //保存四个数的组合总数 int sum = 0;int n,r;int ok=1; //保存所有可能的组合数 void save(int sum){
for(i=0;i<4;++i)
arrange[sum][i] = x[i];
//判断使用该运算符是否合法 int symbollegal(int t,int i,int sum,int layer){
if(arrange[layer][t]+sum>24)
else return arrange[layer][t]+
if(sum-arrange[layer][t]<0)
else return sum-arrange[layer][t];
if(arrange[layer][t]*sum>24)
else return arrange[layer][t]*
if(arrange[layer][t]!=0&&sum%arrange[layer][t]!=0)
else return sum/arrange[layer][t];
}}// 打印结果 void pri(int layer){
int totle = arrange[layer][0];
for(i= 1;i<=3;++i)
if(totle > arrange[layer][i])
temp = symbollegal(i,bol[i],totle,layer);
printf("%d %c %d = %d\n",totle,sym[bol[i]],arrange[layer][i],temp);
temp = symbollegal(i,bol[i],totle,layer);
printf("%d %c %d = %d\n",arrange[layer][i],sym[bol[i]],totle,temp);
printf("\n");} //回溯计算四个组合数出现的情况 void backtrack(int t){
//遍历四个数
for(i = 1;i<= 4;++i)
x[t] = num[i];
//如果当前这个数没有被选择
if(a[i]==0)
//标记该数已经选择
//结束条件:已经找到符合条件的四个数
if(t == 3 )
save(sum);
backtrack(t+1);
//不符合条件,恢复该数的访问权限
}} // 计算该组合数能得出24的情况 void find(int sum,int t,int layer){
int i,temp,
//遍历加、减、乘、除四个符合
for(i=1;i<=4;++i)
//如果选择的符号满足条件
if( (temp = symbollegal(t,i,sum,layer)))
//标记该符号已经选择并修改sum值
//结束条件:四个数都已经完成运算
if(t == 3)
//结果是24点,则打印
if(sum==24)
pri(layer);
find(sum,t+1,layer);
//不符合条件,恢复该符号的访问权限与sum的值
&下面原来是int main()里面的,加到- (BOOL)application:(UIApplication *)application& didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {&&&& 吧:
num[1] = 1;
&&& num[2] = 4;
&&& num[3] = 4;
&&& num[4] = 5;
&&& backtrack(0);
&&& // 遍历所有的组合数
&&& for(int i=0;i<++i)
&&&&&&& find(arrange[i][0],1,i);
&&& if(ok)
&&&&&&& printf("No answer!\n");
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量4602点击量4011点击量3489点击量3406点击量3401点击量3296点击量3108点击量2938点击量2820
&2016 Chukong Technologies,Inc.
京公网安备89秒懂24点游戏的算法和规则-同城游
当前位置:
&秒懂24点游戏的算法...
24点游戏属于益智类的扑克游戏,从游戏规则方面来说,24点游戏的规则和算法应该是最简单易懂的。一般是玩家或者系统从1-10这10个数字中随机抽取四4个供玩家计算(4张牌保证能计算出24点),各玩家根据抽出来的4个数字进行加、减、乘、除,以及括号的运算,使组合出的算式能正确计算出24。24点游戏结束规则:1、四个玩家中的三个在规定时间内正确计算出24点。2、计时器时间到,仍有2个及以上玩家没有正确计算出24点。
352101人在玩
101850人在玩
206898人在玩
259285人在玩
208985人在玩
3201人在玩
147215人在玩
军棋翻翻棋
3201人在玩
123819人在玩
游戏类型:
游戏类型:
游戏类型:
COPYRIGHT & 2017 TOWNCHEER GAMES. ALL RIGHTS RESERVED. 浙江畅唐网络股份有限公司 & 版权所有
《中华人民共和国增值电信业务经营许可证》 编号:浙 B2-
《网络文化经营许可证》浙网文[8号
《文网游备字》[2014]M-CBG136号}

我要回帖

更多关于 24点游戏算法 华为 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信