魔術師發牌問題 C語言
阿新 • • 發佈:2019-02-04
#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; }