1. 程式人生 > >魔術師發牌問題 C語言

魔術師發牌問題 C語言

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct magic)

typedef struct magic{                    //結構體,包含一個整形和一個指標;
    int no;
    struct magic *next;
}PAI;
int a[14]={0};                          //包含14個元素的陣列,用來存放每次翻開的卡牌

PAI *creat(){                           //建立迴圈連結串列   包含13個結構體,整型賦值 1-13 並按順序連結;返回表尾指標。
    PAI *head,*p1,*p2;
    int i;
    head=p1=p2=(PAI *)malloc(LEN);
    for(i=1;i<13;i++){
        p1->no=i;
        p2=p1;
        p1=(PAI *)malloc(LEN);
        p2->next=p1;
    }
    p1->no=13;
p1->next=head;
return p1;

}
void fuzhi(PAI *p){                         // 從表尾開始數,(1-13);每刪除(翻開)一個元素,獲取他的位置  然後在陣列對應的位置賦值該翻開卡牌的數值。
    int i,j;
PAI *p1=p;
for(i=1;i<=13;i++){
        for(j=1;j<i;j++){
                p1=p;
             p=p1->next;
            }
    if(i==1) { a[p1->next->no]=j;
                        p=p->next->next;
                        p1->next=p;
                }
                else{a[p1->next->no]=j;
                       p=p->next;
                       p1->next=p;
            }
        }
}
int main()
{   int i;

    PAI *p=creat();
    fuzhi(p);
    for(i=1;i<14;i++){
        printf("第%d張牌是黑桃%d \n",i,a[i]);

    }

return 0;
}