魔术师发牌问题 C语言

来源:互联网 发布:嵌入式linux教学视频 编辑:程序博客网 时间:2024/05/22 12:03
#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;}

原创粉丝点击