#40795:


lbm00138 (bits/stdc++.h)

學校 : 臺北市立成淵高級中學
編號 : 270386
來源 : [61.71.41.184]
最後登入時間 :
2024-11-09 22:59:56
a156. 橋牌的開叫 -- longbiau | From: [163.21.104.253] | 發表日期 : 2024-06-13 17:59

這題不會很難,但是很複雜,我用了 200 多行程式碼,不知道其他人是否有更好的解法,建議有時間的人再去完成。

1.先用 char 定義   nn[13],en[13],sn[13],wn[13] (四家中每張牌的數字)   及   ns[13],es[13],ss[13],ws[13] (四家中每張牌的花色) 及 o (起始方位)

2.用 int 定義 s,h,d,c  (每種花色出現的次數)  及  t ( HCP )  及  a  ( 方位 ) , b ( 回合 ),一開始 b=0

3.用四次 for 迴圈詢問四家的牌型    scanf("%c%c ",&nn[i],&ns[i]);    ( 後三次 for 迴圈詢問要改其它方位,兩個%c之後空一格 ) 

4.詢問起始方位   scanf("%c",&o);

5設定 a ( 0,1,2,3 ) 分別代表輸入的 ( 北,東,南,西 ) 四個起始方位

6.用 while(b<4) 進行(最多四輪),if (a%4 ==( 0,1,2,3 )) 分別代表輪到各家叫牌

7.在各家一開始叫牌時先把 s,h,d,c,t 設為 0

8.用多個 for 迴圈檢視各家的牌型,( s,h,d,c ) 分別存放黑桃 紅心 方塊 梅花張數, t 為 4*(A的張數)+3*(K的張數)+2*(Q的張數)+1*(J的張數)

9.接著依照條件進行叫牌,判定順序為 2C 1NT 1S 1H 1D 1C ,只要其中一個符合立刻印出並用 break 終止整個 while 迴圈,若都不符合條件先不須印出 Pass ,並把 a( 方位 ) 及 b( 輪數  ) 加一 

10.最後若任何一家有叫不是 Pass 的叫品時 ,b會小於4,否則b>=4。偵測若 b>=4,則印出 All Pass 。

 
ZeroJudge Forum