c语言实例 魔术师的猜牌术(1),C语言猜牌术代码解析
问题描述
魔术师利用一副牌中的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语言猜牌术代码解析相关推荐
- c 语言一个数的n次方,C 语言实例 – 计算一个数的 n 次方 - C 语言基础教程
C 语言实例 计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数. 实例 – 使用 while #include int main() { int base, exponent; lo ...
- c语言实例 魔术师的猜牌术(1),C语言实例:魔术师的猜牌术(1)
魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下.对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看.魔术师将最上面的那张牌数为1,把它翻过来正好是 ...
- c语言实例 魔术师的猜牌术(1),C语言实例:魔术师的猜牌术(2)
魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上.以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放 ...
- c语言实例 魔术师的猜牌术(1),C语言实例 魔术师的猜牌术(1)
满意答案 u6jjltfs0v 2014.05.15 采纳率:43% 等级:12 已帮助:4849人 这个问题你想让别人一步一步帮你递推演示,要累死人的.不仅解释的人累,大段大段的无聊文字你看着 ...
- 【华为OD机试真题 C语言】92、免单统计 | 机试真题+思路参考+代码解析(未)
文章目录 一.题目
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct)C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- c语言中猜字母代码怎么打,C语言代码实现猜数字
本文实例为大家分享了C语言代码实现猜数字的具体代码,供大家参考,具体内容如下 题目描述 猜数字游戏,顾名思义,就是需要人们猜测一个未知但已确定的数.其中,这个未知但要确定的数就要由编写程序随机来产生, ...
- 二维数组c语言矩阵加法,C 语言实例 – 两个矩阵相加 - C 语言基础教程
C 语言实例 使用多维数组将两个矩阵相加. #include int main(){ int r, c, a[100][100], b[100][100], sum[100][100], i, j; ...
- C 语言实例 - 计算自然数的和
C 语言实例 - 计算自然数的和自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,--一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <std ...
- C语言实例第6期:反转字符串
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
最新文章
- java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
- 前端学习(799):根据位置返回字符
- Class_fileAndroid应用调用方法
- FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)
- ASP.NET 2.0中CSS失效的问题总结
- matlab中文帮助_拿走不谢,simulink,stateflow,ecoder帮助手册中英对照版首发
- MINIGUI图形界面开发入门,交叉编译,移植
- python的一些解释
- python统计文本单词总数_python统计文本文件内单词数量的方法
- POJ1700 Crossing River
- POI设置excle单元格样式
- html视图查看,视图.html · zhaohaihang/Semantic UI demo - Gitee.com
- docker 网络模式之 macvlan模式
- jQuery悬浮在线客服代码
- 图解通信原理与案例分析-16:2G GSM基站的工作原理--时分多址与无线资源管理RRM
- 【VUE】在vue中使用google地图
- 预训练模型(PTMs)发展史
- 各种风格404错误页面html模板源码30多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应。
- 判断一个时间段是否经过了另一个时间段
- dhu 2.3 阿姆斯特朗数