【原创】刚刚写的一个小游戏,算扑克牌24点的。
最近没事用纸牌玩这个游戏,用4张扑克牌计算24点的,只能用加减乘除。想起写一个小程序玩玩,这样没事就可以在办公室玩了。
^,^
大家可以随便试试。
20070304...修正了2个算法上的bug。
20070305...修正了1个bug。
[ 本帖最后由 superman_xyz 于 2007-3-5 11:25 编辑 ] 不错!!楼主很厉害!!收了!! 刚刚发现在让计算机求解时存在bug,导致某些需要括号来运算的组合算不出结果,有空改。 上面的bug已经修正。:) 修改了算法,试试算3,3,8,8看看! J,3,9,8
答案是J-8*9-3
看不懂啊.
另外, 一般J,Q,K是当10的. 原帖由 Drifter 于 2007-3-5 12:07 发表
J,3,9,8
答案是J-8*9-3
看不懂啊.
另外, 一般J,Q,K是当10的.
我在结果显示中做了个约定:不考虑乘除法的优先级。
另外,J,Q,K分别是11,12,13。
这样,J-8*9-3就得到24。
还有,没有过滤原理相同的方法,因为计算机不好判断。。。主要是我还没找到方法。:)
[ 本帖最后由 superman_xyz 于 2007-3-5 12:29 编辑 ] 不错,收了看看 用什么做的?
能否公布一下源代码?让大家学习一下。 楼主能否做一个J Q K当10的 小时候常玩的游戏!试哈!!! 多加点自定义就好玩了,比如自定义结果,哪就可以算21点了,JQK的点数自定,多了不少玩法 嗯,有时间我按照各位的提议修改一下吧。其实我最想先把雷同的计算方法过滤掉,呵呵。。
程序用VC写的,算法上没什么难度。我刚刚在网上搜了一下,找到一个别人写的代码,感觉比我的精简,感兴趣的可以看看:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char op, o="+-*/";
float n, on;
int used = {0}, top=0, tp=0, x;
void chk(float k);
void search24(int d);
float calc(float n1, float n2, char o);
void make(int i, float p, float q, char o, int d);
int main( void )
{
scanf("%f%f%f%f", &n, &n, &n, &n);
search24(0);
printf("No answer.\n");
return 0;
}
void chk(float k)
{
if( (tp != 3) || ( fabs(k-24.0) > 0.001 )) return;
for(x=0; x<5; x+=2)
{
printf("%g %c %g = %g\n", on, op, on, calc(on, on, op));
}
exit(0);
}
float calc(float n1, float n2, char o)
{
switch(o){
case '+': return (n1+n2);
case '-': return (n1-n2);
case '*': return (n1*n2);
case '/': return (n1/n2);
}
}
void make(int i, float p, float q, char o, int d)
{
if(fabs(q)>0.001 || o!='/')
n = calc(p, q, o);
op = o;chk(n);
search24(d+1); tp--;
}
void search24(int d)
{
int i, j, k;
float p, q;
if(d>=3) return;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
if( (i!=j)&& (used+used == 0) ) {
used = 1; p=n; q=n;
on = p; on = q;
for(k=0; k<4; k++)
make(i, p, q, o, d);
n = p; used = 0;
top -= 2;
}
}
下载 Posted by superman_xyz on 2007-3-5 11:25 http://www.ibmnb.com/images/common/back.gif
修改了算法,试试算3,3,8,8看看!
这个要用分数的 5 5 5 1 能算么? J Q K 当11 12 13才好玩么。,。。。当10多无聊。。。。。
页:
[1]