
一道c语言编程题(内详):4名专家对4款赛车进行评价……
4名专家对4款赛车进行评价.A说:2号赛车是最好的.B说:4号赛车是最好的.C说:3号赛车不是最好的。D说:B说错了.事实上只有一款赛车是最好的,且只有一名专家说对了.请...
4名专家对4款赛车进行评价.
A说:2号赛车是最好的.
B说:4号赛车是最好的.
C说:3号赛车不是最好的。
D说:B说错了.
事实上只有一款赛车是最好的,且只有一名专家说对了.
请编程输出最佳的车号。
我的一个同学是这样编的:
#include<stdio.h>
void main()
{int m;
for(m=1;m<5;m++)
if(!(m-2)+!(m-4)+!!(m-3)+!!(m-4)==1)
printf("第%d赛车是最好的",m);}
大体是这么编的,我记不太清了,我知道!是什么意思,不用解释,我也知道为什么它们的和等于1。就是不明白为什么要用m去减去那些数字。!(m-2)+!(m-4)+!!(m-3)+!!(m-4),关键就是这一句看不大懂,请高人详解一下啊。对了,我的理解能力仅限于循环语句部分及其之前(条件、选择、循环,再难点还没学)。
或者请高人另外编个程序,谢了!不要太难啊。 展开
A说:2号赛车是最好的.
B说:4号赛车是最好的.
C说:3号赛车不是最好的。
D说:B说错了.
事实上只有一款赛车是最好的,且只有一名专家说对了.
请编程输出最佳的车号。
我的一个同学是这样编的:
#include<stdio.h>
void main()
{int m;
for(m=1;m<5;m++)
if(!(m-2)+!(m-4)+!!(m-3)+!!(m-4)==1)
printf("第%d赛车是最好的",m);}
大体是这么编的,我记不太清了,我知道!是什么意思,不用解释,我也知道为什么它们的和等于1。就是不明白为什么要用m去减去那些数字。!(m-2)+!(m-4)+!!(m-3)+!!(m-4),关键就是这一句看不大懂,请高人详解一下啊。对了,我的理解能力仅限于循环语句部分及其之前(条件、选择、循环,再难点还没学)。
或者请高人另外编个程序,谢了!不要太难啊。 展开
4个回答
展开全部
!(m-2)+!(m-4)+!!(m-3)+!!(m-4)==1
有4的bool型的数值相加,当且仅当只有一个正确时,即有1个等于1.其他3个等于0,这时表示只有一位专家说对了,这是输出的m就是最好的赛车。
至于,为什么要减去数字:
!(m-2)看第一个,要是m=2是最好的,则m-2=0,再取反就是1,当别的取值都为0时,这就是最好的赛车;否则就不是。
其他的几个类似
有4的bool型的数值相加,当且仅当只有一个正确时,即有1个等于1.其他3个等于0,这时表示只有一位专家说对了,这是输出的m就是最好的赛车。
至于,为什么要减去数字:
!(m-2)看第一个,要是m=2是最好的,则m-2=0,再取反就是1,当别的取值都为0时,这就是最好的赛车;否则就不是。
其他的几个类似
展开全部
这个程序用到位运算,一个数据位对应该车,例如2=010,4=100,3=011,如果你实在不能理解你大可以不理会。解此题关键清楚他们的逻辑关系,下图表示
1代表可能为最好的车,0代表不可能为最好的车
1 2 3 4 车号
0 1 0 0 A的评价
0 0 0 1 B的评价
1 1 0 1 C的评价
1 1 1 0 D的评价
从这个矩阵就可以判断出最好的车是3号,为什么呢?
因为只有一个说法是正确的,你尝试令A的评价正确
则B,C,D的评价的非逻辑是正确的,
1 2 3 4 车号
0 1 0 0 A的评价
1 1 1 0 非B的评价
0 0 1 0 非C的评价
0 0 0 1 非D的评价
很明显,此时A与非C,非D是违背的,如此推导则得D的评价正确。
那么得出结论的标准是什么?好车的条件即满足一个评价和其他三个的非逻辑评价都是1。
说到这里,只要用循环遍历的方法就可以实现了。
1代表可能为最好的车,0代表不可能为最好的车
1 2 3 4 车号
0 1 0 0 A的评价
0 0 0 1 B的评价
1 1 0 1 C的评价
1 1 1 0 D的评价
从这个矩阵就可以判断出最好的车是3号,为什么呢?
因为只有一个说法是正确的,你尝试令A的评价正确
则B,C,D的评价的非逻辑是正确的,
1 2 3 4 车号
0 1 0 0 A的评价
1 1 1 0 非B的评价
0 0 1 0 非C的评价
0 0 0 1 非D的评价
很明显,此时A与非C,非D是违背的,如此推导则得D的评价正确。
那么得出结论的标准是什么?好车的条件即满足一个评价和其他三个的非逻辑评价都是1。
说到这里,只要用循环遍历的方法就可以实现了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
m代表真正最好的车号。
如果a是对的,那么!(m-2)就是1。
其余都是这个思路。
最后,只有1个人说对了,所以最后一定要==1才行。
把m从1到4试验一遍就出来咯。
这样说明白么?
如果a是对的,那么!(m-2)就是1。
其余都是这个思路。
最后,只有1个人说对了,所以最后一定要==1才行。
把m从1到4试验一遍就出来咯。
这样说明白么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你学了数电或者数理逻辑就明白了;其实很简单,二楼就说得很清楚了。用数字m表示客观状态,即the best auto.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询