「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想一句話悄悄告訴第二位遊戲者,第二位遊戲者又悄悄地告訴第...