CSDN編程挑戰裡的題目
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等組合.
我的思路是窮舉法,將四個數的所有可能運算方式都處理一遍,如果有24則正確.可惜提交了三次才正確,沒有獲獎的機會了.
我的程序還可以輸出其運算的表達式.
#include <stdio.h> #include <iostream> #include <> #include <cmath> #include <cfloat> #include <cstring> #include <cstdio> g_fourlist[][] = {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, {,,, _buildExpress( a, b, c, d, n, i, j, k, * szN[] = { szI[] = { szJ[] = { szK[] = { (n& szN[] = szI[] = szI[] = szI[] = szI[] = szJ[] = szJ[] = szJ[] = szJ[] = szK[] = szK[] = szK[] = szK[] = (n& sprintf(szExpress, sprintf(szExpress, _can24( a, b, c, d, * ( n = ; n < ; n++ valueA = (n&) ? -()a : ( ( i = ; i < ; i++ valueAB = valueA+ valueAB = valueA- valueAB = valueA* valueAB = valueA/ (n& ( k = ; k < ; k++ valueCD = ()c+ valueCD = ()c- valueCD = ()c* valueCD = ()c/ ( j = ; j < ; j++ valueABCD = valueAB+ valueABCD = valueAB- valueABCD = valueAB* valueABCD = valueAB/ (fabs(valueABCD - ) < ( j = ; j < ; j++ valueABC = valueAB+ valueABC = valueAB- valueABC = valueAB* valueABC = valueAB/ ( k = ; k < ; k++ valueABCD = valueABC+ valueABCD = valueABC- valueABCD = valueABC* valueABCD = valueABC/ (fabs(valueABCD - ) < (fabs(valueABCD - /) < Can24( four[], * ( i = ; i < ; i++ (_can24(four[g_fourlist[i][ four[g_fourlist[i][ four[g_fourlist[i][ four[g_fourlist[i][ }