读书人

24点算法解决方法

发布时间: 2012-03-11 18:15:38 作者: rapoo

24点算法
有谁知道24点的具体算法。能否给出代码来参考一下

[解决办法]

C# code
private const double Precision = 1E-6; // 精度private bool fSearchExpression(double[] ANumbers, string[] AExpressions,    int ALevel, int ADest, List<string> AResults){    bool Result = false;    if ((ALevel <= 1) && (Math.Abs(ANumbers[0] - ADest) <= Precision))    {        AResults.Add(AExpressions[0]);        return true;    }    for (int i = 0; i < ALevel; i++)        for (int j = i + 1; j < ALevel; j++)        {            double A = ANumbers[i];            double B = ANumbers[j];            ANumbers[j] = ANumbers[ALevel - 1];            string vExpA = AExpressions[i];            string vExpB = AExpressions[j];            AExpressions[j] = AExpressions[ALevel - 1];            AExpressions[i] = '(' + vExpA + '+' + vExpB + ')';            ANumbers[i] = A + B;            if (fSearchExpression(ANumbers, AExpressions,                 ALevel - 1, ADest, AResults)) Result = true;            AExpressions[i] = '(' + vExpA + '-' + vExpB + ')';            ANumbers[i] = A - B;            if (fSearchExpression(ANumbers, AExpressions,                ALevel - 1, ADest, AResults)) Result = true;            AExpressions[i] = '(' + vExpB + '-' + vExpA + ')';            ANumbers[i] = B - A;            if (fSearchExpression(ANumbers, AExpressions,                ALevel - 1, ADest, AResults)) Result = true;            AExpressions[i] = '(' + vExpA + '*' + vExpB + ')';            ANumbers[i] = A * B;            if (fSearchExpression(ANumbers, AExpressions,                ALevel - 1, ADest, AResults)) Result = true;            if (B != 0)            {                AExpressions[i] = '(' + vExpA + '/' + vExpB + ')';                ANumbers[i] = A / B;                if (fSearchExpression(ANumbers, AExpressions,                    ALevel - 1, ADest, AResults)) Result = true;            }            if (A != 0)            {                AExpressions[i] = '(' + vExpB + '/' + vExpA + ')';                ANumbers[i] = B / A;                if (fSearchExpression(ANumbers, AExpressions,                    ALevel - 1, ADest, AResults)) Result = true;            }            ANumbers[i] = A;            ANumbers[j] = B;            AExpressions[i] = vExpA;            AExpressions[j] = vExpB;        }    return Result;}private bool SearchExpression(List<string> AResults, int ADest, params int[] ANumbers){    double[] vNumbers = new double[ANumbers.Length];    string[] vExpressions = new string[ANumbers.Length];    for (int i = 0; i < ANumbers.Length; i++)    {        vNumbers[i] = ANumbers[i];        vExpressions[i] = ANumbers[i].ToString();    }    return fSearchExpression(vNumbers, vExpressions, ANumbers.Length, ADest, AResults);}private void button1_Click(object sender, EventArgs e){    List<string> vExpressions = new List<string>();    SearchExpression(vExpressions, 24, 4, 4, 7, 7);    foreach (string vExpression in vExpressions)        textBox1.AppendText(vExpression + "\r\n");}
[解决办法]
探讨
List <string>
这个代表什么意思。。初学者

读书人网 >C#

热点推荐