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