哪款赛车最佳?
Description
四名专家对四款赛车进行评论。
专家A说:a号赛车是最好的。
专家B说:b号赛车是最好的。
专家C说:c号不是最佳赛车。
专家D说:专家B说错了。
事实上只有一款赛车最佳,且只有一名专家说对了,其他三人都说错了。请编程输出最佳车的编号,以及哪位专家所对了。
Input
多组测试数据,对于每组测试数据,第 1 行输入3个正整数,表示a、b 、c的编号,编号x范围(1 <= x <= 4),且编号互不相同。
Output
对于每组测试数据,输出正整数x和字符ch,表示最佳车的编号以及说对的专家的编号,详细格式请参考样例。
Sample
Input
2 4 3
Output
3 D
对于“只有一款赛车最佳,且只有一名专家说对了”
1)如果只有A是正确的,可知B在说谎,C与D却都是正确的
2)如果只有B是正确的,可知A和D在说谎,C却是正确的
3)如果只有C是正确的,可推到A,B不是最好的,则D没有说谎,不符合
4)如果只有D是正确的,可推到B不是最好的,同时A说谎和C说谎,即C为最好的赛车,此推导成立。
#include<stdio.h>
int main()
{
int a,b,c;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
printf("%d D\n",c);
}
}
离谱的老师非要遍历,明明那么麻烦,就很离谱
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch[5],exp[5],num,t;//ch[]为四辆车是否为最好车,ch[最好的车]=1,否则为0
//exp[]表示专家说的话是否正确,正确为1,否则为0
int a,b,c,d;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
d=10-a-b-c;//编号有范围,四个数加起来=10
for(int i=1; i<5; i++)
ch[i]=0;//初始化
for(ch[a]=0; ch[a]<=1; ch[a]++)
for(ch[b]=0; ch[b]<=1; ch[b]++)
for(ch[c]=0; ch[c]<=1; ch[c]++)
for(ch[d]=0; ch[d]<=1; ch[d]++)
{
//遍历四辆车,与四个专家所说的话看是否符合
for(int i=1; i<5; i++)
exp[i]=0;//初始化
if(ch[a]==1)
exp[1]=1;//如果a车最好,证明第一个专家是正确的
if(ch[b]==1)
exp[2]=1;//如果b车最好,证明第二个专家是正确的
if(ch[c]==0)
exp[3]=1;//如果c车不是最好,证明第三个专家是正确的
if(ch[b]==0)
exp[4]=1;//如果b车不是最好,证明第四个专家是正确的
for(int i=1; i<=4; i++)
{
if(ch[i]==1)
num=i;
if(exp[i]==1)
t=i;
}//记录最好的车和正确的专家
if(exp[1]+exp[2]+exp[3]+exp[4]==1&&ch[a]+ch[b]+ch[d]+ch[c]==1)
{
//保证只有一个专家是正确的,和只有一辆车最好
printf("%d %c\n",num,'A'+t-1);
}
}
}
}