C数组解决魔术师发牌问题
来源:互联网 发布:excel数组 编辑:程序博客网 时间:2024/06/03 05:07
问题描述:
- 魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第三张牌翻过来正好是黑桃3;……直到将所有的牌都翻出来为止。问原来牌的顺序是如何的。
- 答案:1 8 2 5 10 3 12 11 9 4 7 6 13
解题思路:
按取牌规则,循环遍历一个数组,得到每一次翻出的牌在数组中的下标(即位置:) 而下标是死的,下标上的牌是活的,所以只需要按部就班的将我们想要翻的牌放在这个位置上即可.
参考代码:
#define _CRT_SECURE_NO_WARNINGS#include<cstdio> #include<cstdlib>#define TOTAL 13 void MagicCard(char **cardInSeq, char **cardInPosition){ int seqArray[TOTAL] = {0}, i = 0, count = 0, turn = 0; while (count < TOTAL) { if (-1 != seqArray[i]) { if (turn++ == count) { cardInPosition[i] = cardInSeq[count++]; seqArray[i] = -1; turn = 0; } } (++i) >= TOTAL ? i = 0 : NULL; }}void main(){ int i; char *cardInSeq[TOTAL] = { "黑桃A", "黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K" }; char *cardInPosition[TOTAL]; MagicCard(cardInSeq, cardInPosition); for (i = 0; i < TOTAL; i++) { (i == 0) ? printf("%s", cardInPosition[i]) : printf(" -> %s", cardInPosition[i]); } getchar();}
阅读全文
0 0
- C数组解决魔术师发牌问题
- 魔术师发牌问题 C语言
- 使用php解决魔术师发牌问题
- 数据结构(c++)魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题(数据结构)
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题2
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 魔术师发牌问题
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- poj 3781
- 类加载器
- java中AWT和SWing的区别与联系
- [学习笔记][Java编程思想]第10章:内部类
- C数组解决魔术师发牌问题
- 【Ubuntu】安装字体
- 多线程编程学习::POSIX 多线程基础(二)
- SpringBoot学习(一)
- Mysql之查询
- Torch中多GPU运行代码学习
- Java手动实现简单 ArrayList
- (五)PipedInputStream与PipedOutputStream
- Hibernate