24點小遊戲演算法

2021-07-26 10:56:05 字數 1241 閱讀 2254

要求:1-9任意四個數字,利用加減乘除括號五種運算使最終結果等於24;如果能達到要求,列印所有方法(同樣的加減乘除,括號不同位置算兩種不同的方法);若不能達到要求,列印「不能計算達到24」。

思考過程:四個數字,三步運算,二個括號,而這兩個括號的位置有五種不同的情況。也就是說,不論運算符號是什麼,利用括號都可以有五種不同的運算順序。

(1)((x,y),z),w

(2)(x,y),(z,w)

(3)(x,(y,z),w)

(4)x,((y,z),w)

(5)x,((y,(z,w))

因此,我的**實現過程是,由於三步運算,就利用三重迴圈。每一步迴圈定義了五個區域性變數來記錄五種情況各自的第一步的暫時結果,在最後一步進行判斷結果是否為24(在第三步迴圈之內)。如果是,則需要列印計算過程。

for (int i = 1; i < 5; i++)

}}

有人可能會問,是不是需要乙個容器來記錄前面每一步過程做的運算?

其實是不需要的。三步迴圈,也就是三個運算子(不考慮括號,因為括號是根據五種運算順序事先就已經決定好了的。),設迴圈變數分別為i,j,k,在做最內層迴圈的時候,是有對應的i,j的,只要利用乙個函式將i,j,k與運算符號相對應起來就可以了!也就是乙個函式引數為0-4(1-5也可),函式體為switch…case或者if…else if…去對應運算符號即可。這樣在第三層迴圈內判斷完之後列印時,直接利用i,j,k 即可判斷運算過程。

#includeusing namespace std;

double cal(int n, double x, double y)

void print(int n)

int main()

else if (x < 10 && x>0 && y < 10 && y>0 && z < 10 && z>0 && w < 10 && w>0)

break;

} for (int i = 1; i < 5; i++)

if (sumb2 == 24)

if (sumc2 == 24)

if (sumd2 == 24)

if (sume2 == 24)

}} }

if (leap == 0)

cout << "無解" << endl;

return 0;

}

24點小遊戲(c語言)

24點遊戲,輸入四個數字,分別進行加減乘除四則運算結果為 24的輸出成立表示式。include include 本函式用於判斷符號的種類 char operator signaltype int signal i 對兩個數進行算術運算 double operation double a,double...

24點遊戲演算法

24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...

24點遊戲演算法

24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...