一副撲克牌的每張牌表示乙個數(j、q、k 分別表示 11、12、13,兩個司令都表示 6)。任取4 張牌,即得到 4 個 1~13 的數,請新增運算子(規定為加+ 減- 乘* 除/ 四種)使之成為乙個表示式。每個數只能參與一次運算,4 個數順序可以任意組合,4 個運算子任意取 3 個且可以重複取。運算遵從一定優先級別,可加括號控制,最終使運算結果為 24。請輸出一種解決方案的表示式,用括號表示運算優先。如果沒有一種解決方案,則輸出 -1 表示無解
#include
#define n 4
// 五種優先順序方式
static
double
first
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
;static
double
second
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
;static
double
third
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
;static
double
four
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
;static
double
fifth
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
;static
intrandom_symbols
(int all,
char opt)
;static
double
compute
(double num1,
double num2,
int opt)
;int
main()
;int i, j, k, g;
// 隨機輸入4個數
for(i =
0;i < n;i++)}
for(i =
0;i < n;i++);
int value =
random_symbols
(all, opt)
;// 陣列傳入實參時只寫陣列名
if(value ==1)
}}}}
printf
("-1");
// 如果無解則返回-1
return0;
}// 陣列傳入形參在變數名後加
static
intrandom_symbols
(int all,
char opt)
//(a opt (b opt c)) opt d
sum =
second
(all[0]
, all[1]
, all[2]
, all[3]
, i, j, k);if
(sum ==24)
//a opt (b opt (c opt d))
sum =
third
(all[0]
, all[1]
, all[2]
, all[3]
, i, j, k);if
(sum ==24)
//a opt ((b opt c) opt d)
sum =
four
(all[0]
, all[1]
, all[2]
, all[3]
, i, j, k);if
(sum ==24)
//(a opt b) opt (c opt d)
sum =
fifth
(all[0]
, all[1]
, all[2]
, all[3]
, i, j, k);if
(sum ==24)
}}}return0;
}// 0, 1, 2, 3 分別代表 加減乘除
static
double
compute
(double num1,
double num2,
int opt)
if(opt ==1)
if(opt ==2)
if(opt ==3)
return sum1;
}/* 四個運算元,三個操作符,兩個括號,有以下五種計算模式
1. ((a opt b) opt c) opt d
2. (a opt (b opt c)) opt d
3. a opt (b opt (c opt d))
4. a opt ((b opt c) opt d)
5. (a opt b) opt (c opt d) */
// 第一種
static
double
first
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
//第二種
static
double
second
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
//第三種
static
double
third
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
//第四種
static
double
four
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
//第五種
static
double
fifth
(double num1,
double num2,
double num3,
double num4,
int opt1,
int opt2,
int opt3)
用撲克牌計算24點
問題描述 一副撲克牌的每張牌表示乙個數 j q k分別表示11 12 13,兩個司令都表示6 任取4張牌,即得到1 13的數,請新增運算子 規定為加 減 乘 除四種 使之成為表示式。每個數只能參與一次運算,4個數順序可以任意組合,4個運算子任意取3個且可以重複取。運算遵從一定有限級別,可加括號控制,...
C 小遊戲 撲克牌21點
21點撲克牌遊戲 程式說明 該程式是模擬21點撲克牌遊戲,玩家最多可以要5張牌,但是如果牌的點數之和超過21點,則自動出局,在不超過21點的情況下,玩家與莊家比牌的大小,大者為贏家 程式片段分析 標頭檔案處 include include include using namespace std cs...
用佇列對撲克牌排序
描述 假設這裡有36張撲克牌,分別為a1 a9,b1 b9,c1 c9,d1 d9,其中a代表方片,b代表草花,c代表紅桃,d代表黑桃,那麼,設定如下的排序規則 1.對於兩張卡牌,x1y1與x2y2,x1與x2表示a d,y1與y2表示1 9,如果x1與x2不同,那麼依照d c b a的方式進行排序...