hiho之搜尋 24點

2021-07-24 06:51:12 字數 1614 閱讀 7523

小hi:小ho,你仔細觀察我們計算24點的方法,來總結有幾種情況。

假設我們用⊙表示運算,⊙除了可以表示基本的"+","-","*","/"外。我們還引入兩個新的運算,"反-",和"反/"。

比如(a 反/ b)的意思是(b / a)。則對形如(c / (a + b))的形式,就可以等價的描述為((a + b) 反/ c)。

利用這6種運算,可以將所有可能的計算過程歸結為2類:

(((a ⊙ b) ⊙ c ) ⊙ d)

((a ⊙ b) ⊙ (c ⊙ d))

小ho:恩..(小ho思考了一下)..好像確實是這樣。

小hi:既然我們已經找到了固定的模式,那麼剩下的就比較簡單了。

將4張牌的值,分別代入a,b,c,d,再把可能的運算子也代入。就可以得到相應的計算式子,將其計算出來,再檢查結果是否等於24。

那麼小ho,你覺得有多少種情況呢?

小ho:由於我們有4個數,所以對於a,b,c,d的對應關係有4!=24種情況。3個運算子,每個運算子可能有6種情況,那就是6^3=216。再考慮到2種不同的模式,所以一共有2 * 24 * 216 = 10368種情況。

小hi:你的計算中並沒有考慮等價的情況,比如a + b 和 b + a,所以實際的情況數其實是小於10368種的。

不過由於對計算機而言,10368種情況數本來也不是很多,而要考慮等價反而顯得比較麻煩。所以我們可以不要去考慮加法和乘法的可逆性,直接列舉所有的情況。

#include#include#includeusing namespace std;

int t;

bool used[4];

double nownumber[4],number[4];

char optype=,ops[3];

double calc(double a, double b, char c)

return s;

}bool makeoperation(int depth)

for(int i=0;i<6;i++)

return false;

}bool makenumber(int depth)

}return false;

}int main()

}

大神的解法:

next_permutation(a,a+4); 遞增

prev_permutation(a,a+4); 遞減

#include#include#includeusing namespace std;  

double a[4];

bool flag;

double so(double a,double b,int k)

return s;

} bool pan(int i,int j,int k)

void solve()

} int main()

while(next_permutation(a,a+4));

if(flag)printf("yes\n");

else printf("no\n");

} return 0;

}

搜尋一 24點(hiho98)

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述週末,小hi和小ho都在家待著。在收拾完房間時,小ho偶然發現了一副撲克,於是兩人考慮用這副撲克來打發時間。小ho 玩點什麼好呢?小hi 兩個人啊,不如來玩24點怎麼樣,不靠運氣就靠實力的遊戲。小ho 好啊,好啊。經過若干...

Leetcode 經典回溯搜尋 24點遊戲

先從四個數中,取處兩個數,共有6種取法。由於減法和除法運算不具有交換律,所以應該考慮順序 共有12種選法 然後從四個符號選出乙個來運算,共有4種選法。還剩下三個數,取出兩個數,共有3種選法,6 然後再運算,共有4種 下面還剩下兩個數,取出兩個數運算,共有4種 2 12 4 6 4 2 4 9216種...

24點之原來如此

24點之原來如此 以上可以用來檢驗問題,僅供參考實際上思維的開發還需要自己多練,所以個人建議,除了加減乘數運算外,還建議增加特殊單目運算子 次方 3 3 2 3 3 9 階乘 如3!3 2 1 6 開方 如 9 3 求模 mod,如10mod3 1,因為10 3 3 1 附 24點簡介 算 24點 ...