经典游戏,计算24点,简单实现
2009-10-31 08:02
696 查看
问题:一副扑克牌,每张牌表示[1,13]之间的一个整数,任意抽4张,用+-/*运算,
使得结果等于24。
分析:4个数,4种运算,选择一个计算顺序,选择3个运算符,最多不过4k种组合,
剪枝都省了,纯暴力搜索。
记4个数为a, b, c, d,运算符为op1, op2, op3,那么所有的计算组合,都可以表示
为以下两种之一:(其中,(ca, cb, cc, cd)是a,b,c,d 4个数生成的全排列中的一组)
(ca op1 cb) op2 (cc op3 cd)
(ca op1 cb) op2 cc op3 cd
现在问题已经转化成两个经典小问题:
4个数,生成全排列
4种运算,允许有重复的取3个
有了思路,代码是时间问题,随手用C写了个,只求一组解便退出,无解不输出。
使得结果等于24。
分析:4个数,4种运算,选择一个计算顺序,选择3个运算符,最多不过4k种组合,
剪枝都省了,纯暴力搜索。
记4个数为a, b, c, d,运算符为op1, op2, op3,那么所有的计算组合,都可以表示
为以下两种之一:(其中,(ca, cb, cc, cd)是a,b,c,d 4个数生成的全排列中的一组)
(ca op1 cb) op2 (cc op3 cd)
(ca op1 cb) op2 cc op3 cd
现在问题已经转化成两个经典小问题:
4个数,生成全排列
4种运算,允许有重复的取3个
有了思路,代码是时间问题,随手用C写了个,只求一组解便退出,无解不输出。
#include <stdio.h> #include <math.h> double add(double a, double b) {return a+b;} double sub(double a, double b) {return a-b;} double mut(double a, double b) {return a*b;} double div(double a, double b) {return (b<0.000001)?99999999:a/b;} double (*op[])(double, double) = {add, sub, mut, div}; char *op_c="+-*/"; double e24(double x) {return (fabs(x-24)<0.000001);} #define make_per(s, x,y,z) do {/ (x) = (s)/16;/ (y) = (s)%16/4;/ (z) = (s)%4;/ } while(0) #define done(f) do {/ printf(f,a, op_c[o1], b, op_c[o2], c, op_c[o3], d);/ return 0;/ } while(0) int main() { int cd[4], i, j, k, l, op_seq=64; int o1, o2, o3, o4, a, b, c, d, n_seq; scanf("%d%d%d%d", cd, cd+1, cd+2, cd+3); while (op_seq--) { make_per(op_seq, o1, o2, o3); n_seq = 64; while (n_seq--) { make_per(n_seq, i, j, k); for (l=0; l<4; l++) { if ((i+1)*(j+1)*(k+1)*(l+1)!=24) continue; a=cd[i]; b=cd[j]; c=cd[k]; d=cd[l]; if ( e24( op[o2](op[o1](a,b),op[o3](c,d)) ) ) done("(%d %c %d) %c (%d %c %d)/n"); if ( e24( op[o3](op[o2](op[o1](a,b),c),d) ) ) done("((%d %c %d) %c %d) %c %d/n"); } } } }
相关文章推荐
- C语言实现简单24点游戏
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 最简单的小型商城实现:Serlvet+Jsp经典案例
- java实现简单的网络象棋游戏
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第五部分:游戏类
- 数组例子2:二维数组中的行列互换和按钮控件数组实现计算器界面(暂不支持计算功能,仅界面及简单输入)
- c语言编程 :模拟实现简单扫雷游戏
- C语言实现一个简单的猜数字游戏
- C#实现计算年龄的简单方法汇总
- go实现一个简单的游戏服务器框架(lotou)编码
- 今天开始做战斗,回合制战斗代码实现第一篇,从头开始,简单的2d回合制游戏
- 文曲星猜数游戏的一个简单实现
- 用原生JS实现一个简单计算的功能实例
- 自娱自乐~经典24点游戏
- 闲话WinFrom与WPF——一个简单而经典的实现方式
- 一个简单的jQuery计算器实现了连续计算功能
- 使用Olami SDK实现一个语音输入数字进行24点计算的iOS程序
- J2ME游戏开发中时钟的简单实现
- 简单实现手机游戏雪花场景效果