這題不會很難,但是很複雜,我用了 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 。