魔术师发牌问题 C语言

#include 
#include 
#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;jnext;
            }
    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;
}

你可能感兴趣的:(C)