- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)
您可能关注的文档
最近下载
- 2025年中国榴莲行业市场调研及未来发展趋势预测报告.docx
- 安全生产管理机构职责.docx VIP
- 彩云追月钢琴谱钢琴简谱 数字谱 钢琴双手简谱.pdf VIP
- 正常人体解剖学期重点总结.doc VIP
- 说文解字540首口诀.doc VIP
- 2025年一级建造师一建机电实务案例分析考点速记考点重点知识总结摘要.pdf VIP
- DB13T 1141-2009 贡(宫)面DB13T 1141-2009 贡(宫)面.docx VIP
- TCECS1424-2023 健康照明设计标准.pdf VIP
- GB_T 32078.1-2015 船舶与海上技术 船用呼吸器 第1部分船用紧急逃生呼吸器(EEBD).pdf
- DLT995-2006 继电保护和电网安全自动装置检验规程.docx VIP
文档评论(0)