魔术师发牌问题
来源:互联网 发布:夜神模拟器mac版玩崩坏 编辑:程序博客网 时间:2024/04/20 10:47
一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下。说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,全部都准确无误。求解:魔术师手中牌的原始顺序是什么样子的?
解题思路:利用循环单链表实现,输出原始顺序
#include "stdio.h"#include "stdlib.h"#define NUMBER 13typedef struct node{ int data; struct node *next;}node, *linkList;linkList InitList(){ linkList head, p; head = NULL; p = head; node *s; int i; for (i = 0; i < NUMBER; i++) { s = (node*)malloc(sizeof(node)); // 初始化为0,用于判断是否已赋值 s->data = 0; if (head == NULL) { head = s; } else p->next = s; p = s; } s->next = head; return head;}void Magician(linkList head){ node *p = (node*)malloc(sizeof(node)); p = head; p->data = 1; //第一张牌放1 int num; int i; for (num = 2; num <= NUMBER; num++) { for (i = 0; i < num; i++) { p = p->next; if (p->data != 0) { // 该位置已有牌,跳过 i--; } } p->data = num; }}int main(int argc, char const *argv[]){ linkList p; int i; p = InitList(); Magician(p); for (i = 0; i < NUMBER; i++) { printf("%d->", p->data); p = p->next; } return 0;}
阅读全文
0 0
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题(数据结构)
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题2
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- delete释放new[ ]开辟的内存
- 实现一个复数类
- 四种方法解析XML文件
- Linux学习经典书籍
- 面试题
- 魔术师发牌问题
- 一分钟了解负载均衡的一切
- 移动测试基础 测试之道--阿里巴巴八年测试专家
- js根据值删除
- Redis笔记
- ThreadPoolExecutor使用及Android中常见的4种线程池
- 基于ECharts+百度地图开发散点扩散图
- 计蒜课的一道题
- HDOJ2002_计算球体积