一道简单的c语言题目

有A,B,C,D四个足球队参加比赛,有甲乙丙丁四人进行预测,甲说:A队第一,c队第三。乙说:b队第三,c队第二。丙说:a队第二,c队第三。丁说:c队第一,d队第三。
结果出来发现每人只对了一半,请问最后的结果是什么。
请用c语言写出。

我们先把文字语言转换为我们的编程语言:
对甲来说:(a==1 && c!=3) || (a!=1 && c==3)
对乙来说:(b==3 && c!=2) || (b!=3 && c==2)
对丙来说:(a==2 && c!=3) || (a!=2 && c==3)
对丁来说:(c==1 && d!=3) || (c!=1 && d==3)
由于他们的话当中,只有一半是对的,不能多也不能少,所以只要这四个语句同时成立就可以找到答案

所以实现程序如下:
#include "stdio.h"

main()
{
int a,b,c,d;
int output = 1;
for(a=1;a<5;a++)
{
for(b=1;b<5;b++)
{
for(c=1;c<5;c++)
{
for(d=1;d<5;d++)
{
if(((a==1 && c!=3) || (a!=1 && c==3))&&((b==3 && c!=2) || (b!=3 && c==2))&&((a==2 && c!=3) || (a!=2 && c==3))&&((c==1 && d!=3) || (c!=1 && d==3)))
{
output = 0; //用来控制是停止循环
break; //如果找到合适的给我停止循环,而不是continue;因为我们都知道,结果就只有一个,所以不必要把它全部执行完,下同
}
else
continue;
}
if(output == 0)
break;
else
continue;
}
if(output == 0)
break;
else
continue;
}
if(output == 0)
break;
else
continue;
}
printf("比赛的结果是:\n");
printf("\t a 是第 %d 名 !\n",a);
printf("\t b 是第 %d 名 !\n",b);
printf("\t c 是第 %d 名 !\n",c);
printf("\t d 是第 %d 名 !\n",d);
getchar();
}

执行结果是:

比赛结果是:
a 是第 3 名 !
b 是第 3 名 !
c 是第 3 名 !
d 是第 3 名 !

不要觉得奇怪,他们并列第三是有可能的,因为题中没有说明比赛只有他们四人参加!!
不知给你这样的大幅,不知你明不明白,你最好自己上机运行一下,不懂再找我,还有,我对你说声sorry,其实我昨天就看到你的信息了,不过我咱天没空给你答复,不好意思!

我后来想一下,好像你的题目有些问题,因为它最终的答案不是唯一的,a 可能是第三,也可能是第四,不过我想这个编程的思路是对的!!!你再看看吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-25
四层嵌套循环。a,b,c,d分别代表四个队真正的名次。当四个变量互不相同,且
(a==1 && c!=3) || (a!=1 && c==3)
(b==3 && c!=2) || (b!=3 && c==2)
(a==2 && c!=3) || (a!=2 && c==3)
(c==1 && d!=3) || (c!=1 && d==3)
成立时,是答案