魔术师发牌问题
来源:互联网 发布:网络诈骗多少金额立案 编辑:程序博客网 时间:2024/06/05 05:11
*问题描述:魔术师手里一共有13张牌,全是黑桃,1~13.
*********魔术师需要实现一个魔术:这是十三张牌全部放在桌面上(正面向下),
********第一次摸出第一张,是1,翻过来放在桌面上。
******第二次摸出从上往下数第二张,是2,翻过来 放在桌面上,(第一张放在最下面去,等会儿再摸),
*****第三次摸出从上往下数第三张,是3,翻过来放在桌面上,(第一张和第二张 放在最下面去,等会儿再摸)
**
*********魔术师需要实现一个魔术:这是十三张牌全部放在桌面上(正面向下),
********第一次摸出第一张,是1,翻过来放在桌面上。
******第二次摸出从上往下数第二张,是2,翻过来 放在桌面上,(第一张放在最下面去,等会儿再摸),
*****第三次摸出从上往下数第三张,是3,翻过来放在桌面上,(第一张和第二张 放在最下面去,等会儿再摸)
**
#include<iostream>#include<stdlib.h>using namespace std;typedef int ElemType;struct Node{Node* next;ElemType data;};typedef Node LinkList;Node* Create(int n)//尾插法创建循环链表{Node *head,*p,*q;head=new Node;head->next=NULL;q=head;for(int i=0;i<n;i++){p=new Node;p->data=0;q->next=p;q=p;}p->next=head->next;free(head);return p->next;}void main(){int n=13;int countnumber=2;Node *head=Create(n);Node *p=head;p->data=1;while(1){for(int i=0;i<countnumber;i++){p=p->next;if(p->data)i--;//关键!若该节点已经被填充过,这一个就不算数,指针移到下一个。所以这一步i--等效于不算数}if(p->data==0){p->data=countnumber++;if(countnumber==14)break;}}p=head;cout<<p->data<<endl;p=p->next;while(p!=head){cout<<p->data<<endl;p=p->next;}}
结果:
阅读全文