用撲克牌計算24點(C)

2021-10-12 19:59:34 字數 3809 閱讀 9248

一副撲克牌的每張牌表示乙個數(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的方式進行排序...