第4章--习题解析---逻辑思维

萌到你眼炸
902次浏览
2021年01月30日 11:54
最佳经验
本文由作者推荐

鸠占鹊巢的意思-

2021年1月30日发(作者:鸡头米的功效与作用)

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
表示< br>这
3
个人的饭量。将这
3
个人说的话
As

Bs

Cs
写成表达式:





As=(B>A)+(C==A)











Bs=(A>B)+(A>C)











Cs=(C>B)+(B>A)


3
)根据题意,饭量越小的人讲 对的话越多,也就是说,不存在两
个人,
其中一个人的饭量比另一个人小,
且说对的话 不比另一个人多。
当变量满足这个条件时,就可以输出这组解了。



#include //

4-1--
饭量比较参考程序



int

main( )



{ int

A,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=(B>A)+(C==A);







bs=(A>B)+(A>C);







cs=(C>B)+(B>A);







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)))












{

cout <<


















cout <<



















cout <<















}



//
输出结束









}


//
循环结束






return 0;



}


[
输出结果
]

A=3



B=1



C=2

2

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
,就输出该专家。



#include >//

4-2


最佳汽车参考程序



int

main( )



{ int

car,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)





{

cout <<










if (as==1)

cout <<









if (bs==1)

cout <<










if (cs==1)

cout <<









if (ds==1)

cout <<









}



//
输出结束









}



//
循环结束






return 0; }
输出结果:
car

3

,

4
号专家说对了





3

5
位跳水高手参加
10m
高台跳水决赛,
有好 事者让
5
人据实力
预测比赛结果。





A
选手说:
B
第二,我第三;





B
选手说:我第二,
E
第四;





C
选手说:我第一,
D
第二;





D
选手说:
C
最后,我第三;





E
选手说:我第四,
A
第一;





决赛成绩公布之后,
每位选手的预测都只说对了一半,
即一对< br>一错。请编程解出比赛实际名次。

算法分析:


用变量< br>A

B

C

D

E
表示
5
个选手的排名,取值在
l

2

3
,< br>4

5



枚举每个选手的名次,这可以通过一个 五重循环来实现。根据题
意,
每个人说的话可以写成如下形式:

鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-


鸠占鹊巢的意思-