24点游戏 程序(一)

无意间看见这个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个表达式进行穷举。

转载于:https://www.cnblogs.com/marryZhan/archive/2012/02/26/2497560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值