您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 第4章--习题解析---逻辑思维
第4章习题解析---逻辑思维1.3个人比饭量大,每个人说了两句话。A说:B比我吃得多,C和我吃得一样多。B说:A比我吃得多,A也比C吃得多。C说:我比B吃得多,B比A吃得多。事实上饭量越小的人讲对的话越多。请编程按饭量的大小输出3个人的顺序。算法分析:1)把每个人的饭量分别用整数1,2,3来表示,数字越大就表示这个人的饭量越大,由于题目中A说的话中提到了有可能两个人的饭量相同,也就是说代表3个人饭量的数字有可能相等。2)用一个三重循环来枚举每个人的饭量,分别用A,B,C表示这3个人的饭量。将这3个人说的话As,Bs,Cs写成表达式:As=(BA)+(C==A);Bs=(AB)+(AC);Cs=(CB)+(BA);3)根据题意,饭量越小的人讲对的话越多,也就是说,不存在两个人,其中一个人的饭量比另一个人小,且说对的话不比另一个人多。当变量满足这个条件时,就可以输出这组解了。①#includeiostream.h//4-1--饭量比较参考程序②intmain()③{intA,B,C,as,bs,cs;//定义3个变量,分别表示3个人④for(A=1;A=3;A++)//枚举A⑤for(B=1;B=3;B++)//枚举B⑥for(C=1;C=3;C++)//枚举C⑦{as=(BA)+(C==A);⑧bs=(AB)+(AC);⑨cs=(CB)+(BA);⑩if(!((A=B)&&(as=bs)||(A=C)&&(as=cs)⑪||(B=C)&&(bs=cs)||(B=A)&&(bs=as)⑫||(C=A)&&(cs=as)||(C=B)&&(cs=bs)))⑬{coutA=Aendl;⑭coutB=Bendl;⑮coutC=Cendl;⑯}//输出结束⑰}//循环结束⑱return0;⑲}[输出结果]:A=3B=1C=22.4名专家对4款赛车进行评论A说:2号赛车是最好的。B说:4号赛车是最好的。C说:3号不是最佳赛车。D说:B说错了。事实上:只有一款赛车最佳,且只有一名专家说对了,其他3人都说错了。请编程输出最佳车的车号,以及哪位专家说对了。[算法分析]根据题意,只有一款赛车最佳。这就有4种情况,可以枚举这4种情况,采用循环结构,令变量为BestCar,取4个可能的车号。将A,B,C,D说的话与BestCar联系起来,有As=(BcstCar==2);Bs=(BestCar==4);Cs=(BestCar!=3);Ds=(BestCar!=4);根据题意,只有一名专家说对,因此在程序中使用如下的判定条件:if(As+Bs+Cs+Ds==1)即可判定BestCar的取值,就是最佳车号,同时再测试As,Bs,Cs,Ds哪个取值为1,就输出该专家。①#includeiostream.h//4-2,最佳汽车参考程序②intmain()③{intcar,as,bs,cs,ds;④for(car=1;car=4;car++)//枚举每款汽车⑤{as=(car==2);bs=(car==4);cs=(car!=3);ds=!bs;⑥if(as+bs+cs+ds==1)⑦{coutcarcarendl;⑧if(as==1)coutAendl;⑨if(bs==1)coutBendl;⑩if(cs==1)coutCendl;⑪if(ds==1)coutDendl;⑫}//输出结束⑬}//循环结束⑭return0;}输出结果:car3,4号专家说对了3.5位跳水高手参加10m高台跳水决赛,有好事者让5人据实力预测比赛结果。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错。请编程解出比赛实际名次。算法分析:用变量A,B,C,D,E表示5个选手的排名,取值在l,2,3,4,5。枚举每个选手的名次,这可以通过一个五重循环来实现。根据题意,每个人说的话可以写成如下形式:As=(B==2)+(A==3);Bs=(B==2)+(E==4);Cs=(C==1)+(D==2);Ds=(C==5)+(D==3);Es=(E==4)+(A==1);由于每个人只说对了一句话,即判定条件为:if(As==1&&Bs==1&&Cs==1&&Ds==1&&Es==1)每个人名次不同:A≠B≠C≠D≠E这样就可以判定出每个选手的名次了,然后再按排名顺序输出即可。①#includeiostream.h//习题4.3---跳水名次②intmain()③{intA,B,C,D,E,ta,tb,tc,td,te;④for(A=1;A=5;A++)//枚举A⑤for(B=1;B=5;B++)//枚举B⑥for(C=1;C=5;C++)//枚举C⑦for(D=1;D=5;D++)//枚举D⑧for(E=1;E=5;E++)//枚举E⑨{ta=(B==2)+(A==3);tb=(B==2)+(E==4);⑩tc=(C==1)+(D==2);td=(C==5)+(D==3);⑪te=(E==4)+(A==1);⑫if((ta==1)&&(tb==1)&&(tc==1)&&(td==1)&&(te==1)&&⑬((A!=B)&&(A!=C)&&(A!=D)&&(A!=E))⑭&&((B!=A)&&(B!=C)&&(B!=D)&&(B!=E))⑮&&((C!=A)&&(C!=B)&&(C!=D)&&(C!=E))⑯&&((D!=A)&&(D!=B)&&(D!=C)&&(D!=E))⑰&&((E!=A)&&(E!=B)&&(E!=C)&&(D!=E)))⑱{//输出判断结果⑲coutA=Aendl;⑳coutB=Bendl;21coutC=Cendl;22coutD=Dendl;23coutE=Eendl;24}25}//循环结束26return0;27}[输出结果]A=3B=2C=5D=2E=44.我国有4大淡水湖。A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。C说:洪泽湖最小,洞庭湖第:。D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。4个人每个人仅答对了一个,请编程给出4个湖大小。算法分析:1)用汉语拼音表示4个湖名:洞庭湖:Dongting洪泽湖:Hongze鄱阳湖:Poyang太湖:Tai2)令湖的大小依次为1,2,3,4。1表示最大,4表示最小。3)将4个人说的话写成表达式:As=(Dongting==1)+(Hongze==4)+(Poyang==3);Bs=(Hongze==1)+(Dongting==4)+(Poyang==2)+(Tai==3);Cs=(Hongzc==4)+(Dongting==3);Ds=(Poyang==1)+(Tai==4)+(Hongze==2)+(Dongting==3);4)用1,2,3,4去枚举每个湖的大小,可以通过四重循环来实现。题目说4个人每个人只答对了一句,也就是说程序中的判定条件为:if(As==1&&Bs==1&Cs==1&&Ds==1)这样就可以确定4个湖的大小了,随后按照从大到小的顺序输出这4个湖。输出结果:鄱阳湖1,洞庭湖2太湖3洪泽湖4参考程序:#includeiostreamusingnamespacestd;intmain()//主函数{intd,h,p,t,as,bs,cs,ds;for(d=1;d=4;d++)for(h=1;h=4;h++)for(p=1;p=4;p++)for(t=1;t=4;t++){as=(d==1)+(h==4)+(p==3);bs=(h==1)+(d==4)+(p==2)+(t==3);cs=(h==4)+(d==3);ds=(p==1)+(t==4)+(h==2)+(d==3);if((as==1&&bs==1&cs==1&&ds==1)&&(d!=h&&d!=p&&d!=t)&&(h!=p&&h!=t)&&(p!=t)){coutd=dendl;couth=hendl;coutp=pendl;coutt=tendl;}}}
本文标题:第4章--习题解析---逻辑思维
链接地址:https://www.777doc.com/doc-5685974 .html