问题描述

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

你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?

问题分析

题目中描述的内容比较多,但已经将魔术师出牌的过程描述的很清楚了。

假设桌子上有13个空盒子排成一圈,设定其中一个盒子序号为1,将黑桃A放入1号盒子中,接着从下一个空盒子开始重新计数,当数到第2个空盒子时,将黑桃2放入其中。然后再从下一个空盒子开始重新计数,数到第3个空盒子时,将黑桃3放入其中,这样依次进行下去,直到将13张牌全部放入空盒子中为止。需要注意的是,在计数过程中要跳过那些已放入牌的盒子,而只对空盒子计数。最后牌在盒子中的顺序,就是魔术师手中牌的顺序。

算法分析

根据问题分析,使用循环结构来实现程序。使用程序将分析过程模拟出来,就可以计算出魔术师手中牌的原始次序。由于有13张牌,因此显然要循环13次,每次循环时找到与牌序号对应的那个空盒子,因此循环体完成的功能就是找到对应的空盒子将牌存入。

程序流程图:

下面是完整的代码:

#include

int a[14];

int main()

{

int i, j=1, n;

printf("魔术师手中的牌原始次序是:\n");

for( i=1; i<=13; i++ )

{

n=1;

do

{

if(j>13)

j=1;

if(a[j])  /*盒子非空*/

j++;

else  /*盒子为空*/

{

if(n==i)

a[j]=i;

j++;

n++;

}

}

while(n<=i);

}

for( i=1; i<=13; i++ )

printf("%d ", a[i]);

printf("\n");

return 0;

}

运行结果:

魔术师手中的牌原始次序是:

1 8 2 5 10 3 12 11 9 4 7 6 13

c语言实例 魔术师的猜牌术(1),C语言猜牌术代码解析相关推荐

  1. c 语言一个数的n次方,C 语言实例 – 计算一个数的 n 次方 - C 语言基础教程

    C 语言实例 计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数. 实例 – 使用 while #include int main() { int base, exponent; lo ...

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

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

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

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

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

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

  5. 【华为OD机试真题 C语言】92、免单统计 | 机试真题+思路参考+代码解析(未)

    文章目录 一.题目

  6. C 语言实例 - 使用结构体(struct)

    C 语言实例 - 使用结构体(struct)C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...

  7. c语言中猜字母代码怎么打,C语言代码实现猜数字

    本文实例为大家分享了C语言代码实现猜数字的具体代码,供大家参考,具体内容如下 题目描述 猜数字游戏,顾名思义,就是需要人们猜测一个未知但已确定的数.其中,这个未知但要确定的数就要由编写程序随机来产生, ...

  8. 二维数组c语言矩阵加法,C 语言实例 – 两个矩阵相加 - C 语言基础教程

    C 语言实例 使用多维数组将两个矩阵相加. #include int main(){ int r, c, a[100][100], b[100][100], sum[100][100], i, j; ...

  9. C 语言实例 - 计算自然数的和

    C 语言实例 - 计算自然数的和自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,--一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <std ...

  10. C语言实例第6期:反转字符串

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

最新文章

  1. java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
  2. 前端学习(799):根据位置返回字符
  3. Class_fileAndroid应用调用方法
  4. FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)
  5. ASP.NET 2.0中CSS失效的问题总结
  6. matlab中文帮助_拿走不谢,simulink,stateflow,ecoder帮助手册中英对照版首发
  7. MINIGUI图形界面开发入门,交叉编译,移植
  8. python的一些解释
  9. python统计文本单词总数_python统计文本文件内单词数量的方法
  10. POJ1700 Crossing River
  11. POI设置excle单元格样式
  12. html视图查看,视图.html · zhaohaihang/Semantic UI demo - Gitee.com
  13. docker 网络模式之 macvlan模式
  14. jQuery悬浮在线客服代码
  15. 图解通信原理与案例分析-16:2G GSM基站的工作原理--时分多址与无线资源管理RRM
  16. 【VUE】在vue中使用google地图
  17. 预训练模型(PTMs)发展史
  18. 各种风格404错误页面html模板源码30多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应。
  19. 判断一个时间段是否经过了另一个时间段
  20. dhu 2.3 阿姆斯特朗数

热门文章

  1. 2020年手机上最好的25种免费游戏
  2. MSL、TTL、RTT
  3. 周鸿祎:人人需要Mentor,世界没有奇迹
  4. 山寨芯片大鳄终于来了MTK6577 A9双核全功能通讯平板(2012年芯片,低端以A9双核为代表)
  5. php微云上传,API - 微云
  6. 一个计算机网络的物理组成,1.1.2.1 计算机网络物理组成
  7. 计算机基础知识键盘知识,电脑键盘的一些基础知识和维护方法
  8. 贝尔维尤游戏巨头融资2亿美元!
  9. Jmeter 线程数、Ramp-Up、循环次数 详解
  10. java 通过ffmpeg 将海康视频转码