C 英雄聯盟挑戰賽 24點遊戲

2021-06-15 00:19:18 字數 1179 閱讀 8836

「24點遊戲是一種使用撲克牌來進行的益智類遊戲,遊戲內容是:從一副撲克牌中抽去大小王剩下52張,任意抽取4張牌,把牌面上的數(a代表1)運用加、減、乘、除和括號進行運算得出24。每張牌都必須使用一次,但不能重複使用。

有些組合有不同種演算法,例如要用2,4,6,12四張牌組合成24點,可以有如下幾種組合方法:

2 + 4 + 6 + 12 = 24 

4 × 6 ÷ 2 + 12 = 24 

12 ÷ 4 × (6 + 2) = 24

當然,也有些組合算不出24,如1、1、1、1 和 6、7、8、8等組合。」

--題目描述來自wikipedia:

解題思路:給出a,b,c,d的所有排列情況,即4!=24種情況,對於每種序列分別用+,-,*,/來插入到兩個數字之間,然而括號可以通過計算的先後順序來實現。同時,演算法採用結果導向的思路。例如:計算(a+b*d)/c的結果,假設其結果滿足result = 24,則處理順序為:

1.result  = result *c;

2.result = result  - a; 

3.result = (result *c - a; 

4.reult = result /d; 

5.result = result -b; 

如果result = 0,則結果滿足條件。當然為了處理分數情況,分別用child,parent來表示result的分子與分母。其中加法減法--分子變分母不變,會通分;乘法除法--分子分母可能都變。

源**如下:

//判定序列是否滿足24遊戲

int can24(int a,int n,int j,int child,int parent)

else

} for(int i = 0;i < n;i++)

else if(i == 1)

else if(i == 2)

else if(i == 3)

}return 0;

}//利用排列組合思想將每個排列進行一次判斷。

void permutation24(int a,int n,int k)

else }

} int main()

;//no

int c = ;//ok

int d = ;//ok

if(permutation24(c,4,0))

{cout<<"ok"<

Wannafly挑戰賽24 A 石子遊戲

alice和bob在玩遊戲,他們面前有n堆石子,對於這些石子他們可以輪流進行一些操作,不能進行下去的人則輸掉這局遊戲。可以進行兩種操作 1.把石子數為奇數的一堆石子分為兩堆正整數個石子 2.把兩堆石子數為偶數的石子合併為一堆 兩人都足夠聰明,會按照最優策略操作。現在alice想知道自己先手,誰能最後...

hihoCoder挑戰賽C題 永恆遊戲

有乙個定理保證,對於乙個固定的初始局面,不論怎麼操作,要麼可以無限操作下去,要麼在相同步數之後停在相同的局面上。所以只需要模擬100000次即可知道本題答案。定理的證明可以在以下 中找到 定理1.1 include include using namespace std define inf 100...

傳話遊戲 程式設計之美挑戰賽

題目描述 時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb alice和bob還有其他幾位好朋友在一起玩傳話遊戲。這個遊戲是這樣進行的 首先,所有遊戲者按順序站成一排,alice站第一位,bob站最後一位。然後,alice想一句話悄悄告訴第二位遊戲者,第二位遊戲者又悄悄地告訴第...