比赛名次
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
解题思路:
暴力,将所有情况都列举出来,然后根据条件进行判断。每个选手说的话只有一半是正确的。
程序代码:
#include <stdio.h>
#include <string.h>
int x[6];
int f10(){
if(x[1]==2)
return 1;
return 0;
}
int f11(){
if(x[0]==3)
return 1;
return 0;
}
int f20(){
if(x[1]==2)
return 1;
return 0;
}
int f21(){
if(x[4]==4)
return 0;
return 0;
}
int f30(){
if(x[2]==1)
return 1;
return 0;
}
int f31(){
if(x[3]==2)
return 1;
return 0;
}
int f40(){
if(x[2]==5)
return 1;
return 0;
}
int f41(){
if(x[3]==3)
return 1;
return 0;
}
int f50(){
if(x[4]==4)
return 1;
return 0;
}
int f51(){
if(x[0]==1)
return 1;
return 0;
}
int main()
{
int i,j,k,l,m;
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){ if(j==i) continue;
for(k=1;k<=5;k++){ if(k==j||k==i) continue;
for(l=1;l<=5;l++){ if(l==k||l==j||l==i) continue;
for(m=1;m<=5;m++){ if(m==l||m==k||m==j||m==i) continue;
x[0]=i;x[1]=j;x[2]=k;x[3]=l;x[4]=m;
if(f10()+f11()==1&&f20()+f21()==1&&f30()+f31()==1&&f40()+f41()==1&&f50()+f51()==1){
printf("%d%d%d%d%d%d%d%d%d%d\n",f10(),f11(),f20(),f21(),f30(),f31(),f40(),f41(),f50(),f51());
printf("A=%d B=%d C=%d D=%d E=%d\n",i,j,k,l,m);
}
}
}
}
}
}
return 0;
}