superman_xyz 发表于 2007-3-4 02:19

【原创】刚刚写的一个小游戏,算扑克牌24点的。

最近没事用纸牌玩这个游戏,用4张扑克牌计算24点的,只能用加减乘除。
想起写一个小程序玩玩,这样没事就可以在办公室玩了。
^,^

大家可以随便试试。



20070304...修正了2个算法上的bug。
20070305...修正了1个bug。

[ 本帖最后由 superman_xyz 于 2007-3-5 11:25 编辑 ]

硬盘是我家 发表于 2007-3-4 07:57

不错!!楼主很厉害!!收了!!

superman_xyz 发表于 2007-3-4 08:32

刚刚发现在让计算机求解时存在bug,导致某些需要括号来运算的组合算不出结果,有空改。

superman_xyz 发表于 2007-3-4 09:14

上面的bug已经修正。:)

superman_xyz 发表于 2007-3-5 11:25

修改了算法,试试算3,3,8,8看看!

Drifter 发表于 2007-3-5 12:07

J,3,9,8
答案是J-8*9-3
看不懂啊.

另外, 一般J,Q,K是当10的.

superman_xyz 发表于 2007-3-5 12:28

原帖由 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 编辑 ]

redfox1001 发表于 2007-3-5 12:56

不错,收了看看

truewater 发表于 2007-3-5 12:57

用什么做的?
能否公布一下源代码?让大家学习一下。

s20 发表于 2007-3-5 15:00

楼主能否做一个J Q K当10的

ahao 发表于 2007-3-5 15:14

小时候常玩的游戏!试哈!!!

diomandcold 发表于 2007-3-5 16:39

多加点自定义就好玩了,比如自定义结果,哪就可以算21点了,JQK的点数自定,多了不少玩法

superman_xyz 发表于 2007-3-5 16:53

嗯,有时间我按照各位的提议修改一下吧。其实我最想先把雷同的计算方法过滤掉,呵呵。。
程序用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;
            }
}

deduct1 发表于 2009-12-16 11:13

下载

bango 发表于 2009-12-16 11:28

Posted by superman_xyz on 2007-3-5 11:25 http://www.ibmnb.com/images/common/back.gif
修改了算法,试试算3,3,8,8看看!
这个要用分数的

8610 发表于 2009-12-16 13:12

5 5 5 1 能算么?

8610 发表于 2009-12-16 13:14

J Q K 当11 12 13才好玩么。,。。。当10多无聊。。。。。
页: [1]
查看完整版本: 【原创】刚刚写的一个小游戏,算扑克牌24点的。