逻辑思维与计算机解题续.ppt

上传人:wuy****n92 文档编号:86902084 上传时间:2023-04-15 格式:PPT 页数:69 大小:331KB
返回 下载 相关 举报
逻辑思维与计算机解题续.ppt_第1页
第1页 / 共69页
逻辑思维与计算机解题续.ppt_第2页
第2页 / 共69页
点击查看更多>>
资源描述

《逻辑思维与计算机解题续.ppt》由会员分享,可在线阅读,更多相关《逻辑思维与计算机解题续.ppt(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第 三三 章章 逻辑思维与计算机解题逻辑思维与计算机解题(续)(续)例例 3-3 求求10!/*/*程序名:程序名:3_3.cpp(循环语句示例)(循环语句示例)*/*作作 者:者:wuwh */*编制时间:编制时间:2002年年9月月20日日 */*主要功能:计算主要功能:计算10 的阶乘的阶乘 */*#include /预编译命令预编译命令void main()/主函数主函数 /主函数开始主函数开始int i=0,j=0,k=0;/声明声明 i,j,k 为整型变量,并初始化为为整型变量,并初始化为0long sum=1;/声明声明 sum 为长整型变量,并初始化为为长整型变量,并初始化为

2、1for(i=10;i=1;i=i-1)/用用 for 循环作累乘运算循环作累乘运算cout i=i;/显示显示isum=sum*i;/每一步乘积每一步乘积cout tsum=sum endl;/显示每一步乘积显示每一步乘积for(j=1;j=5500;j=j+1)/用用 for 循环延迟时间循环延迟时间for(k=1;k=10000;k=k+1);/用用 for 循环延迟时间循环延迟时间 cout 10!=sum endl;/显示运算结果显示运算结果 /主函数结束主函数结束2#include void main()int i=0,j=0,k=0;long sum=1;for(i=10;i=1

3、;i=i-1)cout i=i;sum=sum*i;cout tsum=sum endl;for(j=1;j=5500;j=j+1)for(k=1;k=10000;k=k+1);cout 10!=sum=1i=1;表达式表达式表达式表达式3 3 为为为为 i=i-1i=i-1;7for循环的循环的NS图图为了以后讲解的方便,有必要使用更为简为了以后讲解的方便,有必要使用更为简便的便的N-S结构流程图,如图结构流程图,如图3.3for(i=1;i=100;i=i+1)循环体循环体图图图图3.33.38if(sum=3)if(sum=3)coutcout This man is char(64+k

4、)This man is char(64+k)endlendl;g=1;g=1;这一段程序可以读作:如果这一段程序可以读作:如果这一段程序可以读作:如果这一段程序可以读作:如果sumsum真的为真的为真的为真的为 3 3 时,做下面时,做下面时,做下面时,做下面两件事两件事两件事两件事(1 1)输出做好事的人;)输出做好事的人;)输出做好事的人;)输出做好事的人;(2 2)将本题的有解标志置为)将本题的有解标志置为)将本题的有解标志置为)将本题的有解标志置为 1 1。其中其中其中其中(sum=3)(sum=3)为条件判断语句中的条件,根据其真为条件判断语句中的条件,根据其真为条件判断语句中的条

5、件,根据其真为条件判断语句中的条件,根据其真假使程序分支。假使程序分支。假使程序分支。假使程序分支。例例 3-1 的解要用到的解要用到分支语句分支语句,即需要判断当四句,即需要判断当四句话中有话中有 3 句为真时,我们要将该人判定为做好事者。句为真时,我们要将该人判定为做好事者。请看如下程序段请看如下程序段9下面我们画出分支程序的下面我们画出分支程序的NSNS流程图,流程图,这种图直观清晰,一目了然。这种图直观清晰,一目了然。图图图图3.43.4103.if(表达式表达式)语句语句 1;else 语句语句 2;如果表达式为真,执行语句如果表达式为真,执行语句1;否则执行语句;否则执行语句24.

6、if(表达式表达式)语句块语句块 1;else语句块语句块 2;11一般格式一般格式1.if (if (表达式表达式表达式表达式)语句语句语句语句 1 1;如果表达式为真,执行语句如果表达式为真,执行语句如果表达式为真,执行语句如果表达式为真,执行语句 1 1;否则什么都不做;否则什么都不做;否则什么都不做;否则什么都不做.2.if(if(表达式表达式表达式表达式)语句块语句块语句块语句块 1 1;如果表达式为真,做语句块如果表达式为真,做语句块如果表达式为真,做语句块如果表达式为真,做语句块 1 1 的内容;否则什么都不做;的内容;否则什么都不做;的内容;否则什么都不做;的内容;否则什么都不

7、做;12举例:实现如图函数举例:实现如图函数图图图图3.53.513/*/*/*/*程程程程 序序序序 名:名:名:名:3_4.cpp3_4.cpp(分支程序示例)(分支程序示例)(分支程序示例)(分支程序示例)*/*/*作作作作 者:者:者:者:wuwhwuwh */*/*编制时间:编制时间:编制时间:编制时间:20012001年年年年8 8月月月月 */*/*主要功能:实现符号函数主要功能:实现符号函数主要功能:实现符号函数主要功能:实现符号函数 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令void main()void main()/主函数主函数

8、主函数主函数 /主函数开始主函数开始主函数开始主函数开始intint x=0,y=0;x=0,y=0;/声明声明声明声明x x,y y为整型变量,并初始化为为整型变量,并初始化为为整型变量,并初始化为为整型变量,并初始化为0 0coutcout 请输入请输入请输入请输入x x x;x;/从键盘输入整数送至从键盘输入整数送至从键盘输入整数送至从键盘输入整数送至x x中中中中if(x0)if(x0)/如果如果如果如果x x00,将,将,将,将1 1赋给赋给赋给赋给y yy=1;y=1;elseelseif(x=0)if(x=0)/如果如果如果如果x x=0=0,将,将,将,将0 0赋给赋给赋给赋给

9、y yy=0;y=0;elseelsey=-1;y=-1;/否则(否则(否则(否则(x x00),将),将),将),将-1-1赋给赋给赋给赋给y ycoutcout 当当当当x=x x=x 时时时时,y=,y=y y endlendl;/输出输出输出输出x x,y y的值的值的值的值 /主函数结束主函数结束主函数结束主函数结束14NSNS图图图图图图3.63.615NSNS图图有了上述了解之后,我们来看解有了上述了解之后,我们来看解“谁做的好事谁做的好事”的程序框图的程序框图图图图图3.73.716现在我们来分析现在我们来分析“谁做的好事谁做的好事”的的NS流程图。流程图。它是由两大块组成的,

10、如图它是由两大块组成的,如图3.8循环体循环体for(k=1;k=4;k+)语句语句1;1;图图图图3.83.8第一块第一块循环结构循环结构第二块第二块分支结构分支结构17 第一块是第一块是循环结构循环结构,功能是产生被试对,功能是产生被试对象,依次为象,依次为A、B、C、D。并测试四句话有多。并测试四句话有多少句为真,如有少句为真,如有3句为真,则可确定做好事者,句为真,则可确定做好事者,同时置有解标志为同时置有解标志为1。第二块为第二块为分支结构分支结构,功能是判断是否无,功能是判断是否无解,如为真,则输出无解信息。解,如为真,则输出无解信息。这是粗看。再往细看,第一块的循环体这是粗看。再

11、往细看,第一块的循环体又由两块组成,如图又由两块组成,如图3.9,中含两条赋值语句中含两条赋值语句中含一条分支语句中含一条分支语句18我们讲这一段是希望你掌握我们讲这一段是希望你掌握NS图,这对今后图,这对今后的学习会有好处。按照程序框图很容易写出程序的学习会有好处。按照程序框图很容易写出程序(如下页所示)(如下页所示)thisman=64+k;sum=(thisman!=A)+(thisman=C)+(thisman=D)+(thisman!=D);图图图图3.93.9sum=3真真假假输出该被测试者;输出该被测试者;有解标志置有解标志置1 1;19/*/*/*/*程程程程 序序序序 名:名

12、:名:名:3_5.cpp *3_5.cpp */*/*作作作作 者:者:者:者:wuwhwuwh */*/*编制时间:编制时间:编制时间:编制时间:20012001年年年年8 8月月月月 */*/*主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令void main()void main()/主函数主函数主函数主函数 /主函数开始主函数开始主函数开始主函数开始intint k=0,sum=0,g=0;k=0,sum=0,g=0;/声明变量为整数类型,且均初始化为声明变量为整数类

13、型,且均初始化为声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为0 0char char thismanthisman=;=;for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)/k /k既是循环控制变量,也表示第既是循环控制变量,也表示第既是循环控制变量,也表示第既是循环控制变量,也表示第k k个人个人个人个人 /for /for 循环体开始循环体开始循环体开始循环体开始thismanthisman=64+k;=64+k;sum=(sum=(thismanthisman!=A)!=A)+(+(thismanthisman=C)=C)+(+(thismant

14、hisman=D)=D)+(+(thismanthisman!=D);!=D);if(sum=3)if(sum=3)/如果如果如果如果4 4句话有句话有句话有句话有3 3句话为真,则输出该人句话为真,则输出该人句话为真,则输出该人句话为真,则输出该人/输出做好事者输出做好事者输出做好事者输出做好事者coutcout 做好事者为做好事者为做好事者为做好事者为 char(64+k)char(64+k)endlendl;g=1;g=1;/有解标志置有解标志置有解标志置有解标志置1 1 /for /for 循环体结束循环体结束循环体结束循环体结束if(g!=1)if(g!=1)/则输出无解信息则输出无

15、解信息则输出无解信息则输出无解信息 coutcout Cant found!Cant found!endlendl;/主函数结束主函数结束主函数结束主函数结束20#include#include void main()void main()intint k=0,sum=0,g=0;char k=0,sum=0,g=0;char thismanthisman=;=;for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)thismanthisman=64+k;=64+k;sum=(sum=(thismanthisman!=A)+(!=A)+(thismanthisman=D)=D

16、)+(+(thismanthisman=C)+(=C)+(thismanthisman!=D);!=D);if (if (sum=3sum=3)coutcout 做好事者为做好事者为做好事者为做好事者为 char(64+k)char(64+k)endlendl;g=1;g=1;if(g!=1)if(g!=1)coutcout Cant found!Cant found!endlendl;21/*/*/*/*程程程程 序序序序 名:名:名:名:3_6.cpp *3_6.cpp */*/*作作作作 者:者:者:者:wuwhwuwh */*/*编制时间:编制时间:编制时间:编制时间:20012001

17、年年年年8 8月月月月 */*/*主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令void main()void main()/主函数主函数主函数主函数 /主函数开始主函数开始主函数开始主函数开始intint k=0,sum=0,g=0;k=0,sum=0,g=0;/声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为0 0for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)/循环

18、从循环从循环从循环从k k为为为为1 1到到到到4 4,sum=0;sum=0;/循环体内的初始化循环体内的初始化循环体内的初始化循环体内的初始化if(k!=1)sum=sum+1;/if(k!=1)sum=sum+1;/如如如如A A的话为真,则让的话为真,则让的话为真,则让的话为真,则让sumsum加加加加1 1;if(k=3)sum=sum+1;/if(k=3)sum=sum+1;/如如如如B B的话为真,则让的话为真,则让的话为真,则让的话为真,则让sumsum加加加加1 1;if(k=4)sum=sum+1;/if(k=4)sum=sum+1;/如如如如C C的话为真,则让的话为真,

19、则让的话为真,则让的话为真,则让sumsum加加加加1 1;if(k!=4)sum=sum+1;/if(k!=4)sum=sum+1;/如如如如D D的话为真,则让的话为真,则让的话为真,则让的话为真,则让sumsum加加加加1 1;if(sum=3)if(sum=3)/若有三句话为真,则做下列两件事若有三句话为真,则做下列两件事若有三句话为真,则做下列两件事若有三句话为真,则做下列两件事 coutcout This man is char(64+k)This man is char(64+k)endlendl;/输出做好事者输出做好事者输出做好事者输出做好事者g=1;g=1;/让有解标志置让

20、有解标志置让有解标志置让有解标志置1 1 if(g!=1)if(g!=1)/则输出无解信息则输出无解信息则输出无解信息则输出无解信息 coutcout Cant found!Cant found!endlendl;/主函数结束主函数结束主函数结束主函数结束22for(k=1;k=4;k=k+1)sum=0;if(k!=1)sum=sum+1;/如如A的话为真,的话为真,则让则让sum加加1;if(k=3)sum=sum+1;/如如B的话为真,则让的话为真,则让sum加加1;if(k=4)sum=sum+1;/如如C的话为真,则让的话为真,则让sum加加1;if(k!=4)sum=sum+1;/

21、如如D的话为真,则让的话为真,则让sum加加1;.23/*/*/*/*程程程程 序序序序 名:名:名:名:3_7.cpp *3_7.cpp */*/*作作作作 者:者:者:者:wuwhwuwh */*/*编制时间:编制时间:编制时间:编制时间:20012001年年年年8 8月月月月 */*/*主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事主要功能:谁做的好事 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令void main()void main()/主函数主函数主函数主函数 /主函数开始主函数开始主函数开始主函数开始intint k=0,g

22、=0;k=0,g=0;/声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为声明变量为整数类型,且均初始化为0 0for(k=1;k=4;k=k+1)/kfor(k=1;k=4;k=k+1)/k既是循环控制变量,也表示第既是循环控制变量,也表示第既是循环控制变量,也表示第既是循环控制变量,也表示第k k个人个人个人个人 /for /for 循环体开始循环体开始循环体开始循环体开始if(k!=1)+(k=3)+(k=4)+(k!=4)=3)if(k!=1)+(k=3)+(k=4)+(k!=4)=3)/如果如果如果如果4 4句话有句话有句话有句话有3 3

23、句话为真,则输出该人句话为真,则输出该人句话为真,则输出该人句话为真,则输出该人/输出做好事者输出做好事者输出做好事者输出做好事者coutcout 做好事者为做好事者为做好事者为做好事者为 char(64+k)char(64+k)endlendl;g=1;g=1;/有解标志置有解标志置有解标志置有解标志置1 1 /for /for 循环体结束循环体结束循环体结束循环体结束if(g!=1)if(g!=1)/则输出无解信息则输出无解信息则输出无解信息则输出无解信息 coutcout Cant found!Cant found!endlendl;/主函数结束主函数结束主函数结束主函数结束上述程序可以

24、简化为:上述程序可以简化为:上述程序可以简化为:上述程序可以简化为:24for(k=1;k=4;k=k+1)if(k!=1)+(k=3)+(k=4)+(k!=4)=3)cout 做好事者为做好事者为 char(64+k)endl;g=1;25 for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)if(if(k!=1)(k!=1)+(k=3)(k=3)+(k=4)(k=4)+(k!=4)(k!=4)=3)=3)coutcout“做好事者为做好事者为做好事者为做好事者为”char(64+k)char(64+k)endlendl;g=1;g=1;26第第 四四 章章 逻辑判断与解

25、题思路逻辑判断与解题思路某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:A A、B B 至少有一人作案;至少有一人作案;至少有一人作案;至少有一人作案;A A、E E、F F 三人中至少有两人参与作案;三人中至少有两人参与作案;三人中至少有两人参与作案;三人中至少有两人参与作案;A A、D D 不可能是同案犯;不可能是同案犯;不可能是同案犯;不可能是同案犯;B B、C C 或同时作案,或与本案无关;或同时作案,或与本案无关;或同时作案,或与本案无关;或

26、同时作案,或与本案无关;C C、D D 中有且仅有一人作案;中有且仅有一人作案;中有且仅有一人作案;中有且仅有一人作案;如果如果如果如果 D D 没有参与作案,则没有参与作案,则没有参与作案,则没有参与作案,则 E E 也不可能参与作案。也不可能参与作案。也不可能参与作案。也不可能参与作案。试编一程序,将作案人找出来。试编一程序,将作案人找出来。试编一程序,将作案人找出来。试编一程序,将作案人找出来。逻辑表达式逻辑表达式281 1、逻辑与,运算符为、逻辑与,运算符为、逻辑与,运算符为、逻辑与,运算符为&图图图图4.14.1为了解这道题,我们要研究为了解这道题,我们要研究为了解这道题,我们要研究

27、为了解这道题,我们要研究逻辑运算符逻辑运算符逻辑运算符逻辑运算符与与与与逻辑表达式逻辑表达式逻辑表达式逻辑表达式。如图电路如图电路如图电路如图电路A A 表示开关表示开关表示开关表示开关A A合上;合上;合上;合上;B B 表示开关表示开关表示开关表示开关B B合上;合上;合上;合上;A&B A&B 表示灯亮;表示灯亮;表示灯亮;表示灯亮;291 1 表示真,表示真,0 0 表示假,表示假,这是逻辑变量的取值,非真即假这是逻辑变量的取值,非真即假ABA&B111100010000302 2 2 2、逻辑或,运算符为、逻辑或,运算符为、逻辑或,运算符为、逻辑或,运算符为|图图图图 4.24.2如

28、图电路如图电路如图电路如图电路A A 表示开关表示开关表示开关表示开关A A合上;合上;合上;合上;B B 表示开关表示开关表示开关表示开关B B合上;合上;合上;合上;A|B A|B 表示灯亮;表示灯亮;表示灯亮;表示灯亮;311 1 表示真,表示真,0 0 表示假表示假ABA|B111101011000323、逻辑非,运算符为、逻辑非,运算符为!两队比赛篮球,变量两队比赛篮球,变量 A 表示表示 A 队到场,队到场,!A 表示表示 A 队不到场,变量队不到场,变量 B 表示表示 B 队到场,队到场,!B 表示表示 B 队不到队不到场。这场球赛能够赛成,得两队都场。这场球赛能够赛成,得两队都

29、到场。假定到场。假定“能赛成能赛成”用逻辑变量用逻辑变量 C 表示,则表示,则C=A&B33赛不成当然用赛不成当然用!C 表示,表示,D=!C,D 表示赛不成表示赛不成则则D=!A|!B理解为理解为 A 不到场不到场或或 B 不到场不到场,球赛无法进行。球赛无法进行。34思路:思路:1、案情分析:、案情分析:将案情的每一条写成逻辑表达式,将案情的每一条写成逻辑表达式,将案情的每一条写成逻辑表达式,将案情的每一条写成逻辑表达式,第一条用第一条用第一条用第一条用 CC1CC1 表示,表示,表示,表示,第二条用第二条用第二条用第二条用 CC2CC2 表示,表示,表示,表示,35CC1CC1:A A和

30、和和和B B至少有一人作案至少有一人作案至少有一人作案至少有一人作案令令令令 A A 变量表示变量表示变量表示变量表示 A A 作案,作案,作案,作案,B B 变量表示变量表示变量表示变量表示 B B 作案作案作案作案A AB BCC1CC10 00 00 01 10 01 10 01 11 11 11 11 1显然这是或的关系,有显然这是或的关系,有显然这是或的关系,有显然这是或的关系,有CC1=(A|B)36CC2:A和和D不可能是同案犯不可能是同案犯可以分析为:可以分析为:A 如果是案犯,如果是案犯,D一定不是案犯,写成一定不是案犯,写成A&(!D)D 如果是案犯,如果是案犯,A一定不是

31、案犯,写成一定不是案犯,写成 D&(!A)A 和和 D 都不是案犯,写成都不是案犯,写成(!A)&(!D)这三者之间是或的关系,因此有这三者之间是或的关系,因此有CC2=!(A&D)37CC2=!(A&D)A AD DA&DA&DCC2CC21 10 00 01 11 11 11 10 00 00 00 01 10 01 10 01 138CC3CC3:A A、E E、F F 中至少有两人涉嫌作案中至少有两人涉嫌作案中至少有两人涉嫌作案中至少有两人涉嫌作案分析有三种可能分析有三种可能分析有三种可能分析有三种可能第一种,第一种,第一种,第一种,A A 和和和和 E E 作案,(作案,(作案,(作

32、案,(A&EA&E)第二种,第二种,第二种,第二种,A A 和和和和 F F 作案,(作案,(作案,(作案,(A&FA&F)第三种,第三种,第三种,第三种,E E 和和和和 F F 作案,(作案,(作案,(作案,(E&FE&F)这三种可能性是这三种可能性是这三种可能性是这三种可能性是 或或或或 的关系,因此有的关系,因此有的关系,因此有的关系,因此有CC3=(A&E)|(A&F)|(E&F)我们写出我们写出我们写出我们写出 CC3CC3 的真值表。的真值表。的真值表。的真值表。39A AE EF FCC3CC31 11 11 11 11 11 10 01 11 10 01 11 10 01 1

33、1 11 10 00 01 10 00 01 10 00 01 10 00 00 00 00 00 00 0CC3=(A&ECC3=(A&E)|(A&FA&F)|(E&F)E&F)40CC4CC4:B B和和和和C C或同时作案,或都与本案无关或同时作案,或都与本案无关或同时作案,或都与本案无关或同时作案,或都与本案无关第一种情况:同时作案(第一种情况:同时作案(第一种情况:同时作案(第一种情况:同时作案(B&CB&C)第二种情况:都与本案无关(第二种情况:都与本案无关(第二种情况:都与本案无关(第二种情况:都与本案无关(!B&!C!B&!C)两者为两者为两者为两者为或或或或的关系,因此有的关

34、系,因此有的关系,因此有的关系,因此有 CC4=(B&C)|(!B&!C)CC4=(B&C)|(!B&!C)B BC C!B!B!C!CB&CB&C!B&!C!B&!CCC5CC51 11 10 00 01 10 01 11 10 00 01 10 00 00 00 01 11 10 00 00 00 00 00 01 11 10 01 11 141CC5CC5:C C、D D中有且仅有一人作案中有且仅有一人作案中有且仅有一人作案中有且仅有一人作案CC5=(C&!D)|(D&!C)42CC6CC6:如果如果如果如果D D没有参与作案,则没有参与作案,则没有参与作案,则没有参与作案,则E E也不

35、可能参与作案。也不可能参与作案。也不可能参与作案。也不可能参与作案。分析这一条比较麻烦一些,可以列出真值表再归纳分析这一条比较麻烦一些,可以列出真值表再归纳分析这一条比较麻烦一些,可以列出真值表再归纳分析这一条比较麻烦一些,可以列出真值表再归纳D DE E!E!ECC6CC6含含含含 义义义义1 11 10 01 1D D作案,作案,作案,作案,E E也作案也作案也作案也作案可能可能可能可能1 10 01 11 1D D作案,作案,作案,作案,E E不作案不作案不作案不作案可能可能可能可能0 00 01 11 1D D不作案,不作案,不作案,不作案,E E也不可能作案也不可能作案也不可能作案也

36、不可能作案可能可能可能可能0 01 10 00 0D D不作案,不作案,不作案,不作案,E E却作案却作案却作案却作案不可能不可能不可能不可能43CC6=D|!E1 10 01 11 1以上是案情分析,已经化成了计算机可解的逻辑表达式以上是案情分析,已经化成了计算机可解的逻辑表达式44 6 6个人每个人都有个人每个人都有个人每个人都有个人每个人都有作案作案作案作案或或或或不作案不作案不作案不作案两种可能,因此两种可能,因此两种可能,因此两种可能,因此有有有有 种组合,从这些组合中挑出符合种组合,从这些组合中挑出符合种组合,从这些组合中挑出符合种组合,从这些组合中挑出符合6 6条分析的作条分析的

37、作条分析的作条分析的作案者。案者。案者。案者。定义定义定义定义 6 6 个整数变量,分别表示个整数变量,分别表示个整数变量,分别表示个整数变量,分别表示 6 6 个人个人个人个人A A,B B,C C,D D,E E,F F。枚举每个人的可能性枚举每个人的可能性枚举每个人的可能性枚举每个人的可能性让让让让 0 0 表示不是罪犯;表示不是罪犯;表示不是罪犯;表示不是罪犯;让让让让 1 1 表示就是罪犯。表示就是罪犯。表示就是罪犯。表示就是罪犯。2、采取枚举方法,枚举什么呢?枚举组合、采取枚举方法,枚举什么呢?枚举组合45ABCDEF00000000000100001011111146 写一个从写

38、一个从000000到到111111的程序的程序for(A=0;A=1;A=A+1)for(B=0;B=1;B=B+1)for(C=0;C=1;C=C+1)for(D=0;D=1;D=D+1)for(E=0;E=1;E=E+1)for(F=0;F=1;F=F+1)coutABCDEF endl;47 for(F=0;F=1;F=F+1)for(F=0;F=1;F=F+1)coutcoutABCDEFABCDEF endlendl;循环体循环体循环体循环体48 for(E=0;E=1;E=E+1)for(E=0;E=1;E=E+1)for(F=0;F=1;F=F+1)for(F=0;F=1;F=F

39、+1)coutcoutABCDEFABCDEF endlendl;循环体循环体循环体循环体49 for(D=0;D=1;D=D+1)for(D=0;D=1;D=D+1)for(E=0;E=1;E=E+1)for(E=0;E=1;E=E+1)for(F=0;F=1;F=F+1)for(F=0;F=1;F=F+1)coutcoutABCDEFABCDEF endlendl;循环体循环体循环体循环体50 for(A=0;A=1;A=A+1)for(A=0;A=1;A=A+1)for(B=0;B=1;B=B+1)for(B=0;B=1;B=B+1)循循循循 for(C=0;C=1;C=C+1)for(

40、C=0;C=1;C=C+1)环环环环 for(D=0;D=1;D=D+1)for(D=0;D=1;D=D+1)体体体体 for(E=0;E=1;E=E+1)for(E=0;E=1;E=E+1)for(F=0;F=1;F=F+1)for(F=0;F=1;F=F+1)coutcoutABCDEFABCDEF endlendl;5152为了给出每个人是否为罪犯的信息,程序中定义为了给出每个人是否为罪犯的信息,程序中定义了一个了一个二维数组二维数组。char info29=“不是罪犯不是罪犯”,“是罪犯是罪犯”;有两个字串每串最多有91个英文字符是是罪罪犯犯00不不是是罪罪犯犯000 01 12 23

41、 34 45 56 67 78 8info为数组名1 10 053char 是说,是说,info 数组的元素为字符,数组的元素为字符,2为下标,表为下标,表示有两个字符串,每个字符串最多有示有两个字符串,每个字符串最多有91个字符。个字符。因为英文字符占一个字节,而汉字占两个字节,故四因为英文字符占一个字节,而汉字占两个字节,故四个汉字要占个汉字要占 8 个英文字符的地方。个英文字符的地方。每一字串后面自动跟一个空字符每一字串后面自动跟一个空字符0因此可以看出:因此可以看出:第第 0 号字符串号字符串 info0 的内容为的内容为“不是罪犯不是罪犯”。第第 1 号字符串号字符串 info1 的

42、内容为的内容为“是罪犯是罪犯”。54在输出时用在输出时用cout“A:”infoA endl;如果如果A为为0,则输出,则输出 A:不是罪犯不是罪犯如果如果A为为1,则输出,则输出 A:是罪犯是罪犯参考程序参考程序 4_1.cpp(案情分析)(案情分析)55/*/*/*/*程程程程 序序序序 名:名:名:名:3_4.cpp *3_4.cpp */*/*作作作作 者:者:者:者:wuwhwuwh */*/*编制时间:编制时间:编制时间:编制时间:20012001年年年年8 8月月月月 */*/*主要功能:案情分析主要功能:案情分析主要功能:案情分析主要功能:案情分析 */*/*#include#

43、include void main(void)/void main(void)/案情分析案情分析案情分析案情分析 /A /A和和和和B B至少有一人作案;至少有一人作案;至少有一人作案;至少有一人作案;cc1=(A|B)cc1=(A|B)/A /A和和和和D D不可能是同案犯;不可能是同案犯;不可能是同案犯;不可能是同案犯;cc2=(A&(!D)|(D&(!A)cc2=(A&(!D)|(D&(!A)/A /A,E E,F F中至少有两人涉嫌作案中至少有两人涉嫌作案中至少有两人涉嫌作案中至少有两人涉嫌作案 cc3=(A&E)|cc3=(A&E)|/(A&F)|(A&F)|/(E&F)(E&F)/

44、B /B和和和和C C或同时作案或都与本案无关或同时作案或都与本案无关或同时作案或都与本案无关或同时作案或都与本案无关 cc4=(B&C)|(!B&!C)cc4=(B&C)|(!B&!C)/C /C,D D中有且仅有一人作案;中有且仅有一人作案;中有且仅有一人作案;中有且仅有一人作案;cc5=(C&!D)|(D&!C)cc5=(C&!D)|(D&!C)/如果如果如果如果D D没有参与作案没有参与作案没有参与作案没有参与作案,则则则则E E也不可能参与作案也不可能参与作案也不可能参与作案也不可能参与作案;cc6=D|(!E);cc6=D|(!E)/编程找出犯罪嫌疑人编程找出犯罪嫌疑人编程找出犯罪

45、嫌疑人编程找出犯罪嫌疑人.intint cc1,cc2,cc3,cc4,cc5,cc6;/cc1,cc2,cc3,cc4,cc5,cc6;/定义定义定义定义6 6个变量个变量个变量个变量,分别表示分别表示分别表示分别表示6 6句话句话句话句话 intint A,B,C,D,E,F;/A,B,C,D,E,F;/定义定义定义定义6 6个变量个变量个变量个变量,分别表示分别表示分别表示分别表示6 6个人个人个人个人 char info29=char info29=不是罪犯不是罪犯不是罪犯不是罪犯,是罪犯是罪犯是罪犯是罪犯;/;/定义二维数组定义二维数组定义二维数组定义二维数组,给出是否罪犯信息给出是

46、否罪犯信息给出是否罪犯信息给出是否罪犯信息 56 for(A=0;A=1;A=A+1)/枚举枚举A for(B=0;B=1;B=B+1)/枚举枚举B for(C=0;C=1;C=C+1)/枚举枚举C for(D=0;D=1;D=D+1)/枚举枚举D for(E=0;E=1;E=E+1)/枚举枚举E for(F=0;F=1;F=F+1)/枚举枚举F cc1=A|B;cc2=!(A&D);cc3=(A&E)|(A&F)|(E&F);cc4=(B&C)|(!B&!C);cc5=(C&!D)|(D&!C);cc6=D|(!E);57/测试测试测试测试6 6句话都为真时句话都为真时句话都为真时句话都为真

47、时,才输出谁是罪犯才输出谁是罪犯才输出谁是罪犯才输出谁是罪犯 if(cc1+cc2+cc3+cc4+cc5+cc6=6)/输出判断结果输出判断结果输出判断结果输出判断结果 coutcout A:A:infoAinfoA endlendl;coutcout B:B:infoBinfoB endlendl;coutcout C:C:infoCinfoC endlendl;coutcout D:D:infoDinfoD endlendl;coutcout E:E:infoEinfoE endlendl;coutcout F:F:infoFinfoF endlendl;/输出结束输出结束输出结束输出结

48、束 /循环结束循环结束循环结束循环结束 58讨讨 论论59大家参与讨论的题大家参与讨论的题大家参与讨论的题大家参与讨论的题五位跳水高手将参加十米高台跳水决赛,有好事五位跳水高手将参加十米高台跳水决赛,有好事者让五个人据实力预测比赛结果。者让五个人据实力预测比赛结果。A选手说:选手说:B第二,我第三;第二,我第三;B选手说:我第二,选手说:我第二,E第四;第四;C选手说:我第一,选手说:我第一,D第二;第二;D选手说:选手说:C最后,我第三;最后,我第三;E选手说:我第四,选手说:我第四,A第一第一;决赛成绩公布之后,每位选手的预测都只说对了决赛成绩公布之后,每位选手的预测都只说对了一半,即一对

49、一错,请编程解出比赛的实际名次。一半,即一对一错,请编程解出比赛的实际名次。60思路:思路:思路:思路:1、首先是将五个人的预测写成逻辑表达式:、首先是将五个人的预测写成逻辑表达式:让关系运算符让关系运算符“=”的含义是的含义是“是是”。让数字让数字 1、2、3、4、5 分别表示分别表示名次名次第一、第二,第一、第二,第五,第五。让整型变量让整型变量 A、B、C、D、E 分别表示每个选手所得分别表示每个选手所得名次。名次。A选手说:选手说:B=2,A=3;B选手说:选手说:B=2,E=4;C选手说:选手说:C=1,D=2;D选手说:选手说:C=5,D=3;E选手说:选手说:E=4,A=1;61

50、2、考虑到每个人说的话是一对一错,、考虑到每个人说的话是一对一错,即一真一假,比如即一真一假,比如A说的说的 (B=2)+(A=3)应该是应该是 1 1 +0 =1 0 +1 =1 62我们可以归纳出要同时满足五个人所说的话都符我们可以归纳出要同时满足五个人所说的话都符合合一半对一半错的条件一半对一半错的条件是是 ta=(B=2)+(A=3)=1;符合符合A选手的话选手的话tb=(B=2)+(E=4)=1;符合符合B选手的话选手的话tc=(C=1)+(D=2)=1;符合符合C选手的话选手的话td=(C=5)+(D=3)=1;符合符合D选手的话选手的话te=(E=4)+(A=1)=1;符合符合E

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁