Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

C語言 紙牌遊戲

我有找到一個類似的解答,但是我真的看不懂...

http://tw.knowledge.yahoo.com/question/question?qi...

我也沒辦法改成我想要的程式

有沒有人可以給我意見呢?

1.發牌函式發給每人五張牌

2.判斷手上的牌是否有一對

3.判斷手上的牌是否有兩對

4.判斷手上的牌是否有三張點數一樣的牌

5.判斷手上的牌是否有四張點數相同的牌

6.判斷手上的牌是否有同花

1 個解答

評分
  • 鳳綾
    Lv 4
    1 0 年前
    最佳解答

    這麼寫:

    void deal()

    {

    int k,j=0,i=52,c[52],num[13],n,maxn,suit[4],s,maxs,two_pairs;

    while (i--) c[i]=i;

    for (i=52;i-->52-4*5;) {

    k = (52-i)%5;

    if (k == 1) {

    printf ("\n%s:","甲\0乙\0丙\0丁"+(52-i)/5*3);

    memset (num,0,13*sizeof(int)); maxn=0;

    memset (suit,0,4*sizeof(int)); maxs=0;

    two_pairs = 0;

    }

    j=rand()%i; j=(c[i]^=c[j]^=c[i]^=c[j]);

    if (++suit[s=j/13] > maxs) maxs = suit[s];

    if (++num [n=j%13] > maxn) maxn = num[n];

    if (num[n] == 2) if(++two_pairs==2) maxn=5;

    printf (" %c%c",3+s,"A23456789TJQK"[n]);

    if (k == 0)

    printf (" %s ,有 %d 張同花色的牌",

    " \0一對\0三條\0鐵支\0兩對"+--maxn*5, maxs);

    }puts("");

    }

    int main()

    {

    srand (time(0));

    for(;;system("pause>o")) deal();

    return 0;

    }

    參考資料: myself
還有問題?馬上發問,尋求解答。