C语言猜凶手及类似题目的实现示例.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

描述:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。

思路及分析:

从来没有做过类似题目的同学第一次看见这道题,可能有点发懵。然后开始考虑假设,排列组

合,枚举等等...但是这道题的代码结果会让你大吃一惊。

首先,要考虑的是如何用代码表示A,B,C,D这四个人说的话?我们定义一char变量killer来表

示凶手。最能想到的就是如果某个人说的话是成立的话,将他的结果为1(类似于bool类型),否则

就是0。这样的想法是正确的。A说,不是A,那么,可以表示为killer!=‘A’。判断成立的话,他就

会返回1,否则,返回0。类似的,其他3个人说的话也可以这样来表示。最后,根据3个人说了真

话,1个人说了假话得知返回的总和为3。比如,我们假设A就是凶手,那么根据四个人说的话,A

说了假话,B也说了假话,和条件是不符合的。这样之后,只是判断了A的情况,B,C,D的情况还没

有判断,只需要加一个循环就可以了。

C语言代码如下:

#includestdio.h

intmain(void)

{

charkiller=A;

for(killer=A;killer=D;killer++)

{

if((killer!=A)+(killer==C)+(killer==D)+(killer!=D)==3)

{

printf(thekilleris%c,killer);

}

}

return0;

}

结果如下:

现在,我们来看和它相似的第二道题目:

描述:

两个乒乓球队进行比赛,甲队为ABC三人;乙队为XYZ三人;抽签决定比赛名单,有人向队员

打听比赛的名单,A说他不和X比,C说他不和Z比。请编程输出所有可能的对阵方案,并统计方

案的个数。

思路及分析:

这道题和猜凶手那道题目的方法是一致的,都是直接把题目的文字描述转换为代码描述。直接

使用for循环即可。代码如下:

#includestdio.h

intmain(void)

{

charA=0;

charB=0;

charC=0;

for(A=X;A=Z;A++)

{

for(B=X;B=Z;B++)

{

for(C=X;C=Z;C++)

{

if((A!=X)+(C!=Z)==2)

{

if(A!=BB!=CC!=A)

文档评论(0)

166****9181 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档