24点游戏 程序(一)

来源:互联网 发布:矩阵论方保镕答案 编辑:程序博客网 时间:2024/05/22 13:55

无意间看见这个24点的网站http://www.24theory.com/solutions/allsolutions/,于是想起来把程序写写。


考虑到中缀表达式有括号的麻烦,所以打算用后缀表达式处理。

24点用后缀表达式的话,一共4个数字,3个运算符。

假设数字用1表示,运算符用2表示。

那么可能的计算方式就是类似

1111222

1112221

。。。

但是这样随便列举出来的不一定是合法的后缀表达式。

所以第一步,找出合法的包含4个数值,3个运算符的后缀表达式。

bool check(int data[]){    int len = 7;    stack<int> suffix;    for (int i = 0; i < len; i++)    {        if (data[i] == 1)        {            suffix.push(data[i]);        }        else if (data[i] == 2)        {            if (suffix.empty())                return false;            if (suffix.top() == 1)            {                suffix.pop();                if (!suffix.empty() && suffix.top() == 1)                {                    //suffix.pop();                }                else                {                    return false;                }            }            else            {                return false;            }        }    }    return !suffix.empty() && suffix.top() == 1;}

void checkValidPost(){    int data[] = {1,1,1,1,2,2,2};    do    {        if (check(data))        {            cout<<data[0]<<" "<<data[1]<<" "<<data[2]<<" "<<data[3]<<" "<<data[4]<<" "<<data[5]<<" "<<data[6]<<" "<<endl;        }    }    while(next_permutation (data,data+7) );}

结果合法的后缀有5个。


后面将用这5个表达式进行穷举。