增加了部分去重複的功能,以及字尾轉中綴顯示。
#include #include #include #include #include #include using namespace std;
struct toperdata
;//檢查計算的引數是否合法,也可以用於過濾一些重複的表示式
bool checkjisuan(double a, double b, int op)
//消除重複
bool checkop(toperdata computedata)
else if (type1 == '/' && (type2 == '*' || type2 == '/'))
}return true;
}//求值
double jisuan(double a, double b, int op)
}//計算表示式的值
double process(toperdata data)
else if (data[i].opertype > 0)
else
}else}}
if (suffix.empty()) return -1;
if (suffix.top().opertype == 0)
return -1;
}int op(char x)
//字尾轉中綴
string posttomid(toperdata data)
else
else
opn.pop();
ope.pop();
if (op(ope.top().opertype) != 0 && op(data[i].opertype) > op(ope.top().opertype))
else
ope.pop();
opn.pop();
tmp1 += data[i].opertype;
tmp1 += tmp2;
opn.push(tmp1);
ope.push(data[i]);}}
string result = opn.top();
cout
{cout<
1 1 1 8,(1+1+1)*8
1 1 1 11,(1+1)*(1+11)
1 1 1 12,1*(1+1)*12
1 1 1 13,(1+1)*(13-1)
1 1 2 6,2*(1+1)*6
1 1 2 7,(1+2)*(1+7)
1 1 2 8,1*(1+2)*8
1 1 2 9,(1+2)*(9-1)
1 1 2 10,2*(1+1+10)
大概6s取得單一結果,一共1362個解。
取得全部結果需要14s。其實還是有很多重複。離
的結果還有一定距離。需要更細化的過濾。
這部分暫時不做了。有空還是想做乙個android的24點小遊戲。
24點遊戲 程式 三
增加了部分去重複的功能,以及字尾轉中綴顯示。部分結果 1 1 1 8,1 1 1 8 1 1 1 11,1 1 1 11 1 1 1 12,1 1 1 12 1 1 1 13,1 1 13 1 1 1 2 6,2 1 1 6 1 1 2 7,1 2 1 7 1 1 2 8,1 1 2 8 1 1 2...
24點遊戲演算法
24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...
24點遊戲設計
24點遊戲設計 問題描述 在數字1 13中隨機生成4個數字,運用加減乘除四則使4個數字的執行結果為24,每個數字僅能使用一次。演算法設計 實現24點運算有如下兩種演算法。演算法一窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性。我們可以將表示式分成以下幾種 首先我們將4個數設為a,b,c,d,...