C语言猜牌术代码解析

栏目: C · 发布时间: 7年前

内容简介:魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。问魔术师手中的牌原始

问题描述

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

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

问题分析

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

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

算法分析

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

程序流程图:

C语言猜牌术代码解析

下面是完整的代码:

#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语言猜牌术代码解析

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-01/156256.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

虚拟化与云计算

虚拟化与云计算

《虚拟化与云计算》小组 / 电子工业出版社 / 2009-10 / 45.00元

本书系统阐述了当今信息产业界最受关注的两项新技术——虚拟化与云计算。云计算的目标是将各种IT资源以服务的方式通过互联网交付给用户。计算资源、存储资源、软件开发、系统测试、系统维护和各种丰富的应用服务,都将像水和电一样方便地被使用,并可按量计费。虚拟化实现了IT资源的逻辑抽象和统一表示,在大规模数据中心管理和解决方案交付方面发挥着巨大的作用,是支撑云计算伟大构想的最重要的技术基石。本书以在数据中心采......一起来看看 《虚拟化与云计算》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换