魔术师的猜牌术(一维数组)
魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下
。对观众说:我不看牌,
只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看。
魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,
然后按顺序从上到下数手中的余牌,第二次数1,2,将第一张牌放在这迭牌的下面,
将第二张牌翻过来,正好是黑桃2,也将它放在桌子上。第三次数1,2,3,将前面两张依次放在这迭牌的下面,
再翻第三张牌正好是黑桃3。这样依次进行将13张牌全翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?
问题分析与算法设计
题目已经将魔术师出牌的过程描述清楚,我们可以利用倒推的方法,很容易地推出原来牌的排列顺序。
人工倒推的方法是:在桌子上放13个空盒子排成一圈,
从1开始顺序编号,将黑桃A放入1号盒子中,
从下一个空盒子开始对空的盒子计数,当数到第二个空盒子时,
将黑桃2放入空盒子中,然后再从下一个空盒子开始对空盒子计数,
顺序放入3,4,5…,直到放入全部13张牌。注意在计数时要跳过非空的盒子,
只对空盒子计数。最后牌在盒子中的顺序,就是魔术师手中原来牌的顺序。

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{int i,j,a[13],n;cout<<"这副牌的排列方式为:";j=0;                //13个空盒的下标。for(i=0;i<13;i++)a[i]=14;            //14代表盒子为空。for(i=0;i<13;i++){n=0;            //第一个空盒子计为0号盒子。while(n<=i){if(j>12)j=0;     //盒子的编号,当大于12时,j重置为第一个盒子的编号0。if(a[j]!=14)      //判断盒子是否为空,若不为空,跳过。j++;else{if(n==i)     //当从第一个空盒开始数,数到的空盒数等于牌的编号时,将牌放入。a[j]=i;n++;       //若不相同,向后数一个盒子j++;       //盒子下标同时+1}}}for(i=0;i<13;i++){a[i]+=1;       //应为之前给牌赋的值为0-12,所以依次+1后输出cout<<setw(3)<<a[i];      }cout<<endl;
}

魔术师的猜牌术(一维数组) C++程序相关推荐

  1. 【刷题记录】【一维数组】魔术师的猜牌术。

    魔术师的猜牌术.魔术师利用一副牌中的十三张黑桃,预先将它们排好后迭在一起,牌面朝下.对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们看看.魔术师将最上面的那张牌数为1, ...

  2. 魔术师利用一副牌中的13张红桃c语言,魔术师的猜牌术(1) 魔术师利用一副牌中的13张黑桃 - 下载 - 搜珍网...

    魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一 起,牌面朝下.对观众说:我不看牌,只数数就可以猜到每张牌 是什么,我大声数数,你们听,不信?你们就看.魔术师将最上 面的那张牌数为1,把它翻过来 ...

  3. 数的变幻(魔术师的猜牌术(2))

    /**************************************** * File Name : figure.c * Creat Data : 2015.1.29 * Author : ...

  4. c语言实例 魔术师的猜牌术(1),C语言实例:魔术师的猜牌术(1)

    魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下.对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看.魔术师将最上面的那张牌数为1,把它翻过来正好是 ...

  5. 魔术师的猜牌术(1)

    魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下.对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看.魔术师将最上面的那张牌数为1,把它翻过来正好是 ...

  6. c语言实例 魔术师的猜牌术(1),C语言实例:魔术师的猜牌术(2)

    魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上.以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放 ...

  7. c语言实例 魔术师的猜牌术(1),C语言实例 魔术师的猜牌术(1)

    满意答案 u6jjltfs0v 2014.05.15 采纳率:43%    等级:12 已帮助:4849人 这个问题你想让别人一步一步帮你递推演示,要累死人的.不仅解释的人累,大段大段的无聊文字你看着 ...

  8. 算法_数学问题_Question8_猜牌术(java实现)

    这篇文章讲述的是算法初级部分的猜牌术问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. 问题描述 魔 ...

  9. 100个python算法超详细讲解:猜牌术

    1.问题描述 魔术师利用一副牌中的13张黑桃,预先将它们排好后叠在一起,并使牌面 朝下.然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大 声数数,你们听,不信你们就看.魔术师将从最上面的 ...

最新文章

  1. undefined reference to `libiconv_open 无法编译PHP libiconv
  2. 【动态规划】装箱问题
  3. 备忘录模式(Memento)
  4. Vulnhub靶机渗透之 AI: Web: 1
  5. 安装 | Anaconda3下载链接
  6. 在服务子程中首先关闭ie 的HTML5连接向导
  7. 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
  8. 最舒服的颜色搭配值,很有用哦,特别是做设计的!!
  9. ACM题目————STL练习之众数问题
  10. Android EventBus现实 听说你out该
  11. VM14安装CentOS7并配置网络
  12. 惠普z800工作站bios设置_HP工作站BIOS说明书适用Z228Z440Z230Z640Z840Z800Z620Z420Z820主板设置.doc...
  13. 古代到现在一些小国家的形成和解体
  14. 破解webstrom2017
  15. 多传感器融合方式分析
  16. 小度、天猫精灵、华为哪款智能音箱值得推荐?
  17. 小新吃上黑苹果13.1
  18. 前端基础学习html部分小结
  19. java面试(JVM)
  20. 关于Android如何集成QQ登录及分享

热门文章

  1. crontab java job_crontab定时任务安装和解析
  2. backlight驱动
  3. LeetCode T46 Permutations
  4. ndk-build 添加window环境变量
  5. Win7系统删除网络驱动器盘符
  6. mount 挂载远端目录
  7. 微商分销管理系统开发解决方案
  8. 19 Python __dict__与dir()区别
  9. 一个拿到人人网和淘宝网offer的大四学生的Android学习经历
  10. 电话机有些故障,用户完全可以自己修好。下面介绍几例,读者遇到类似情况,可以自己动手试试。