魔术师发牌问题

来源:互联网 发布:淘宝手机端图片大小 编辑:程序博客网 时间:2021/09/25 17:50

           魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A,将黑桃A放在桌子上,第二次数1,2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上这样依次进行将13张牌全部翻出,准确无误。


#include<stdio.h>#include<malloc.h>struct node{ int data;     //elementype表示一种数据类型,可能是int/char等等 struct node *next;   //next 指针,用于链表结构指向下一个节点};typedef struct node node; //重定义struct node类型为nodenode* Creat(int n);void Magician(node *head);int main(){int n = 13;node*head = Creat(13);node*p = NULL;p = head;Magician(head);while(n){printf("%d->",p->data);p = p->next;n--;}return 0;}node* Creat(int n){node *p = NULL;node *head;head =(node *)malloc(sizeof(node));p = head;node *s;int i = 1;if(0 != n){while(i <= n){s = (node*)malloc(sizeof(node));s->data = 0;p->next = s;p = s;i++;}s->next = head->next;}free(head);return s->next;}void Magician(node *head){node* p;int j;int Count = 2;p = head;p->data = 1;while(1){for(j = 0;j < Count;j++){p = p->next;if(p->data != 0){j--;}}if(p->data == 0){p->data = Count;Count++;if(Count == 14){break;}}}}

运行结果:


0 0