问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果.
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一.
决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出比赛的实际名次.
#include <iostream.h>
void main()
{
int cc1,cc2,cc3,cc4,cc5; //cc1到cc5代表5位选手的逻辑判断
int A,B,C,D,E; //A,B,C,D,E分别代表5位选手的名次
int g; //问题是否解决的BOOL值
for(A=1; A<=5; A++)
for(B=1; B<=5; B++)
{for(C=1; C<=5; C++)
{for(D=1; D<=5; D++)
{ for(E=1; E<=5; E++)
{ cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3));
cc2=((B==2)&&(!(E==4)))||((!(B==2))&&(E==4));
cc3=((C==1)&&(!(D==2)))||((!(C==1))&&(D==2));
cc4=((C==5)&&(!(D==3)))||((!(C==5))&&(D==3));
cc5=((E==4)&&(!(A==1)))||((!(E==4))&&(A==1));
if(((cc1+cc2+cc3+cc4+cc5)==5)&&(A!=B)&&(A!=C)&&(A!=D)&&(A!=E)&&(B!=C)&&(B!=D)&&(B!=E)&&(C!=D)&&(C!=E)&&(D!=E))
{ g=1;
cout<<"A的名次是:"<<A<<endl;
cout<<"B的名次是:"<<B<<endl;
cout<<"C的名次是:"<<C<<endl;
cout<<"D的名次是:"<<D<<endl;
cout<<"E的名次是:"<<E<<endl;
}}}}};
if(g!=1)
cout<<"Can't found!"<<endl;
}