枚举解决逻辑判断问题.docVIP

  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文档。上传文档
查看更多
枚举解决逻辑判断问题

例1.谁是小偷? 警察抓了a、b、c、d四名嫌疑犯,其中有一个是小偷。 a说:“我不是小偷”; b说:“c是小偷”; C说:“小偷肯定是d”; d说:“c冤枉人” 现在已经知道四人中三人说的是真话,1人说的是假话,问到底谁是小偷? 分析:利用逻辑判断,说真话的人为 1(true),说假话的人为 0(false), 因为只有一人说假话, 则当4个人的值相加为3时成立。 1//谁是小偷 2program xiaotou; 3var k:integer; 4begin 5 k:=0; 6 for k:=1 to 4 do 7 if(ord(k1)+ord(k=3)+ord(k=4)+ord(k4)=3) then 8 writeln(k) 9end. 例2.最大淡水湖 四个学生回答我国四大淡水湖时这样说: 甲说“最大洞庭湖,最小洪泽湖,鄱阳湖第三” 乙说“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三” 丙说“最小洪泽湖,洞庭湖第三” 丁说“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三” 已知每个人只回答对一个,请确定每个湖的大小。 分析:每个湖的大小都不一样,每个湖必须取得1~4里的一个整数,这个整数就代表它们各自的大小,通过枚举来进行判定。 Code 1//最大淡水湖 2program danshuihu; 3var dong,hong,tai,bo:integer; 4begin 5 for dong:=1 to 4 do 6 for hong:=1 to 4 do 7 for tai:=1 to 4 do 8 for bo:=1 to 4 do //本题没有采取优化,而是直接将每种方案进行枚举 9 if((ord(dong=1)+ord(hong=4)+ord(bo=3))=1) 10 and((ord(hong=1)+ord(dong=4)+ord(bo=2)+ord(tai=3))=1) 11 and((ord(hong=4)+ord(dong=3))=1) 12 and((ord(bo=1)+ord(tai=4)+ord(hong=2)+ord(dong=3))=1)then 13 if((botai)and(bodong)and(bohong)and(taidong) 14 and(taihong)and(hongdong)) then 15 writeln(dong,hong,tai,bo) 16end. 例3.数学竞赛获胜者: 在某次数学竞赛中, A、B、C、D、E五名学生被取为前五名。请据下列说法判断出他们的具体名次, 即谁是第几名? 条件1: 你如果认为A, B, C, D, E 就是这些人的第一至第五名的名次排列, 便大错。因为: 没猜对任何一个优胜者的名次。 也没猜对任何一对名次相邻的学生。 条件2: 你如果按D, A , E , C , B 来排列五人名次的话, 其结果是: 说对了其中两个人的名次。 还猜中了两对名次相邻的学生的名次顺序。 分析:本题是一个逻辑判断题,一般的逻辑判断题都采用枚举法进行解决。5个人的名次分别可以有5!=120种排列可能,因为120比较小,因此我们对每种情况进行枚举,然后根据条件判断哪些符合问题的要求。 根据已知条件,A1,B2,C3,D4,E5,因此排除了一种可能性,只有4!=24种情况了。 Code 1Program Exam10; 2Var 3 A,B,C,D,E :Integer; 4 Cr :Array[1..5] Of Char; 5Begin 6 For A:=1 To 5 Do 7 For B:=1 To 5 Do 8 For C:=1 To 5 Do 9 For D:=1 To 5 Do 10 For E:=1 To 5 Do 11 Begin 12{ABCDE没猜对一个人的名次} 13 If (A=1) Or (B=2) Or (C=3) Or (D=4) Or (E=5) Then Continue; 14{他们名次互不重复} 15 If [A,B,C,D,E][1,2,3,4,5] Then Continue; 16{DAECB猜对了两个人的名次} 17 If Ord(A=2)+Ord(B=5)+Ord(C=4)+Ord(D=1)+Ord(E=3)2 Then Continue

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档