日期:2014-05-18 浏览次数:20885 次
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
------解决方案--------------------
这个真没有,所谓的二叉树的算法。其实是中缀表达式。实际上个人建议后缀表达式,也就是一般说的逆波兰表达式