2673:比赛排名

likztime

2018-01-15 17:12:54

Personal

#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; } ```