魔术师发牌问题
来源:互联网 发布:关公为什么是财神 知乎 编辑:程序博客网 时间:2024/04/26 16:58
魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第三张牌翻过来正好是黑桃3;……直到将所有的牌都翻出来为止。问原来牌的顺序是如何的。
#include <iostream>#include <cstdio>#include<cstdlib>#define CardCount 13typedef struct node{int data;struct node *next;}sqlist, *linklist;//创建单链表linklist CreateLinkList(){linklist head = NULL;linklist s;linklist r;int i;r = head;for (i = 1; i <= CardCount; i++){s = (linklist)malloc(sizeof(sqlist));s->data = 0;if (head = NULL){head = s;}else{r->next = s;}r = s;}r->next = head;return head;}void Magician(linklist head){linklist p;int j;int Countnumber = 2;p = head;p->data = 1;while (1){for (j = 0; j < Countnumber; j++){p = p->next;if (p->data != 0){p->next;j--;}}if (p->data == 0){p->data = Countnumber;Countnumber++;if (Countnumber == 14){break;}}}}//销毁链表void DestoryList(linklist *list){linklist ptr = *list;linklist buff[CardCount];int i = 0;while (i<CardCount){buff[i++] = ptr;ptr = ptr->next;}for (i = 0; i < CardCount; ++i){free(buff[i]);}*list = 0;}int main(){linklist p;int i;p = CreateLinkList();Magician(p);printf("发牌顺序如下:\n");for (i = 0; i < CardCount; i++){printf("黑桃%d", p->data);p = p->next;}DestoryList(&p);return 0;}
0 0
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题(数据结构)
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题2
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- ArcEngine-投影变换
- Servlet线程安全问题
- 【Android - 进阶】之图片压缩
- PTA-数据结构 5-45 航空公司VIP客户查询 (25分)
- HTML5学习之一HTML5简介
- 魔术师发牌问题
- 整理一下前后台传值ajax
- 初学构建小项目之仓库管理系统数据库及表的创建及登录页面的实现(一)
- hibernate5 —— hello world
- linux命令终极系列(awk)
- i=i++ 结果还是0
- Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)
- android中检测网络是否断开
- 2015年完美讲课的PPT拿出来分享-Unity 5 光照模型解析