论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP JSP .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 其他 代写论文
当前位置: 澳门大西洋城开户 > 计算机 > VC >

A45024点游戏的开发和实现

   

1.2.2  24点游戏算法(2) paper51.com

24点游戏的算法各种各样,各有千秋,现在让我们来讨论另一种24点游戏算法。此算法是在dos下实现的,但其思想明确,语句简短。其主要思想是简化算法,他将24点的算法排序分成如下几种,如下我们用a,b来代替变量。他将其分成如下6种情况,分别是a+b,a-b,b-a,a*b,a/b,b/a这6种情况,我们知道a+b和b+a是一样的,a*b和b*a是一样的。这样就可以省去2种算法。提高系统的使用效率,内存占用量小。还有其第2个思想是在判别24点正确与否的时候,采用了与24点相减绝对直在1E-6之外则判别其为正确,这就给运算带来了精确度,就如5 5 5 1等的数字也可以轻松算出,不会略过了。如下我们通过一段程序来看看其主程序段。 http://snowings.com

bool Search(int n) http://snowings.com

{

paper51.com

    if (n == 1) { 内容来自论文无忧网 snowings.com

        if (fabs(number[0] - NUMBER_TO_CAL) < PRECISION ) { paper51.com

           cout << expression[0] << endl; http://snowings.com

           return true;

内容来自论文无忧网 snowings.com

        }else {

paper51.com

           return false; 内容来自snowings.com

        } 内容来自论文无忧网 snowings.com

    }

paper51.com

    for (int i =0; i < n; i++) { http://snowings.com

        for(int j = i + 1; j < n; j++) {

paper51.com

           double a, b;

copyright paper51.com

           string expa, expb;

http://snowings.com

           a = number[i];

内容来自论文无忧网 snowings.com

           b = number[j]; 内容来自论文无忧网 snowings.com

           number[j] = number[n - 1]; paper51.com

           expa = expression[i];

http://snowings.com

           expb = expression[j]; copyright paper51.com

           expression[j] = expression[n - 1];

内容来自论文无忧网 snowings.com

           expression[i] = '(' + expa + '+' + expb + ')';

copyright paper51.com

           number[i] = a + b;

内容来自论文无忧网 snowings.com

           if ( Search(n - 1) ) return true;

http://snowings.com

           expression[i] = '(' + expa + '-' + expb + ')';

copyright paper51.com

           number[i] = a - b;

http://snowings.com

           if ( Search(n - 1) ) return true; http://snowings.com

           expression[i] = '(' + expb + '-' + expa + ')'; copyright paper51.com

           number[i] = b - a; 内容来自论文无忧网 snowings.com

           if ( Search(n - 1) ) return true;

copyright paper51.com

                       

paper51.com

           expression[i] = '(' + expa + '*' + expb + ')';

内容来自论文无忧网 snowings.com

            number[i]= a * b; 内容来自snowings.com

           if ( Search(n - 1) ) return true;

http://snowings.com

           if (b != 0) { 内容来自论文无忧网 snowings.com

               expression[i] = '(' + expa + '/' + expb + ')'; http://snowings.com

               number[i] = a / b;

http://snowings.com

               if ( Search(n - 1) ) return true; copyright paper51.com

            } copyright paper51.com

           if (a != 0) { paper51.com

               expression[i] = '(' + expb + '/' + expa + ')'; http://snowings.com

               number[i] = b / a;

内容来自论文无忧网 snowings.com

               if ( Search(n - 1) ) return true;

copyright paper51.com

           }

http://snowings.com

           number[i] = a; copyright paper51.com

           number[j] = b; http://snowings.com

           expression[i] = expa; 内容来自snowings.com

           expression[j] = expb;

内容来自snowings.com

        } 内容来自snowings.com

    } 内容来自snowings.com

    return false; paper51.com

}

paper51.com

我们简单分析下以上的程序,我们可以清楚看到,SEARCH函数一个递归函数,其返回的是bool类型的值,其中number[0]为计算结果,假若其值和24相减为1E-6,则说明算法正确。其主要思想如下:首先我们取前面的两个数a,b对其进行相加,接着将两个相加的数结果存放于number[i]中,于是第2次循环的运算的时候,令其a= number[i];则a成了原先的a和b之和,接着再将其存放于number[i]中,接着我们看到了程序中的递归函数SEARCH(n-1)。当调用递归函数的时候,我们可以看到其实现了所有数的相加,其中的n从原来的最大值4,经过递归达到2,最后生成4个数之和。接着就是递归函数的调用,假如number[i]其中i=0时,如果number[i]与24相减为零,则可以算出24点。如果,其返回直为否,则说明不能算出24点。则程序往下继续执行,接着是判断其他运算。同样的道理可以得出其返回值的正假,由此判断出24点的生成算法。注意假如我们只是简单的用计算结果和24相减为0则大错特错了,因为其中牵涉了到小数的问题。假如在运算中遇到了小数的式子不算,则此种判别是正确的,但24点游戏是允许中间过程存在有限小数,甚至是无限循环小数。因此要判断结果是否为24只能采用模糊的判别,即相减为1E-6之外,则说明其结果为24。

内容来自snowings.com

我们可以举个例子如5 5 5 1 ,其中的运算就牵涉到了小数,其算法为(5-1/5)*5。只要我们的判别是如以上程序的,则此算式将轻易的解出。还有一点就是,简化式子的算法。形如a+b和b+a是一样的,可以省略其中的一种。 paper51.com

   24点游戏的算法有多种多样,以上我只是简单对2种不同思想的算法做了简短的介绍,当然还有些算法也是大同小异,我们也不逐一列出了。介绍了24点算法后,接下来我们来探讨一下,一个有着纸牌图形界面的24点游戏将怎样完成。 内容来自snowings.com

------分隔线----------------------------
联系方式