首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

24点游戏的算法,貌似用二叉树。懂的人进来说说。多谢

2012-04-15 
24点游戏的算法,貌似用二叉树。懂的人进来说说。谢谢!24点游戏的算法,貌似用二叉树。懂的人进来说说。谢谢!四

24点游戏的算法,貌似用二叉树。懂的人进来说说。谢谢!
24点游戏的算法,貌似用二叉树。懂的人进来说说。谢谢!

四个数,三个符号。运算出来的结果为24.

[解决办法]

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;using System.Text.RegularExpressions;namespace MyCsStudy{    /// <summary>    /// 24点算法    /// </summary>    class TwentyFour    {        public static List<string> listOps = new List<string>(); //存加减乘除运算符        static TwentyFour()        {            listOps.Add("+");            listOps.Add("-");            listOps.Add("*");            listOps.Add("/");        }        public static bool Computing(string[] numArr, int numLen, int targetNum)        {            bool flag = false;            for (int i = 0; i < numLen; i++)            {                for (int j = i + 1; j < numLen; j++)                {                    string[] strij = new string[] { numArr[i], numArr[j] };                    numArr[j] = numArr[numLen - 1];                    for (int k = 0; k < listOps.Count; k++)                    {                        numArr[i] = "(" + strij[0] + listOps[k] + strij[1] + ")";                        if (Computing(numArr, numLen - 1, targetNum))                        {                            flag = true;                            return flag;                        }                    }                    numArr[i] = strij[0];                    numArr[j] = strij[1];                }            }            System.Data.DataTable dt = new System.Data.DataTable();            string expression = numArr[0];            /*             * 利用datatable的compute方法计算字符串表达式(不知c有没有类似方法)             * 如果不用datatable的compute方法,不知还有没有其他c#函数?             * 期待高手给出更直观的解答             */            object objNum = dt.Compute(expression, "");            int result;            int.TryParse(objNum.ToString(), out result);            //如果运算结果是预期的数字,而且数组中的数字全部在运算范畴内            if (result == targetNum && numLen == 1)                flag = true;            return flag;        }
[解决办法]
我也可以参考这个:
http://blog.csdn.net/hj3793/article/details/1844148
[解决办法]
这个真没有,所谓的二叉树的算法。其实是中缀表达式。实际上个人建议后缀表达式,也就是一般说的逆波兰表达式

热点排行