2673:比赛排名
likztime
2018-01-15 17:12:54
#2673:比赛排名
总时间限制: 1000ms 内存限制: 65536kB
描述
5名运动员参加100米赛跑,各自对比赛结果进行了预测:
A说:E是第1名。
B说:我是第2名。
C说:A肯定垫底。
D说:C肯定拿不了第1名。
E说:D应该是第1名。
比赛结束后发现,只有获第1名和第2名的选手猜对了,E不是第2名和第3名,没有出现名次并列的情况。
请编程判断5位选手各是第几名。
输入
无
输出
输出要求:按ABCDE的顺序输出5行,其中第1行是A的名次,第2行是B的名次,
第3行是C的名次,第4行是D的名次,第5行是E的名次。
样例输入:无
样例输出:无
#题目分析:
##a一定不是第一:是第一说真话,还会说别人是第一?
##e也不是第一:原因和a一样;还有,e不是第二(因为题目说e不是2和3),e就只能四五!d也不是第一!
##所以a不是第一和第二,自然a,e别想拿一二名。
##现在,只有b和c能拿第一,b却不行,因为a和e也是一样!
##c第一,d就是撒谎,ae也不能拿第二,b第二咯!
##话说c是说真话的第一,那么a就是垫底!(a第五)
##e不能3,只有4;
##d只剩下3.
##代码较为复杂,可以直接手推出来!
```cpp
#include<cstdio>
int main()
{
for(int a=1; a<6; a++)
for(int b=1; b<6; b++)
if(a!=b)
for(int c=1; c<6; c++)
if(c!=a&&c!=b)
for(int d=1; d<6; d++)
if(d!=a&&d!=b&&d!=c)
for(int e=1; e<6; e++)
if(e!=a&&e!=b&&e!=c&&e!=d&&e!=2&&e!=3)
if(a>=3^e==1)
if(b>=3^b==2)
if(c>=3^a==5)
if(d>=3^c!=1)
if(e>=3^d==1)
printf("%d\n%d\n%d\n%d\n%d",a,b,c,d,e);
return 0;
}
```