ABCDE五个人在运动会上分获百米(1)、二百米(2)、跳高(3)、跳远(4)和铅球冠军(5)中的一项,有四个人猜测比赛结果:
甲说:B获铅球冠军,D获跳高冠军。
乙说:A获百米冠军,E获跳远冠军。
丙说:C获跳远冠军,D获二百米冠军。
丁说:B获跳高冠军,E获铅球冠军。
其中每个人说了2句,现知道每个人说对了几句。问5人各获得哪项冠军?
多组测试数据,每组测试数据包含5行
第1行4个数字,分别表示4个人说对的句数(0,1或2)
然后4行分别是各人的2个猜测,每行4个数字,先是运动员 然后是项目,A为1,B为2,C为3,D为4,E为5
在一行分别输出5人拿冠军的项目,如果不能确定则输出"Sorry"
1 1 1 1 2 5 4 3 1 1 5 4 3 4 4 2 2 3 5 5 1 0 1 2 2 5 4 3 1 1 5 4 3 4 4 2 2 3 5 5
1 2 4 3 5 Sorry
#include
using namespace std;
int main()
{
int A,B,C,D,E;
int a[4],f=0,i,j,b[4][4];
while(cin>>a[0]>>a[1]>>a[2]>>a[3])
{
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cin>>b[i][j];
f=0;
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++)
{
if( (A!=B) && (A != C) && (A!=D) &&(A!=E) &&(B!=C)&&(B!=D)&&(B!=E)&&(C!=D)&&(C!=E)&&(D!=E))
if ( (((B==5)+(D==3))==a[0]) && (((A==1)+(E==4))==a[1]) && (((C==4)+(D==2))==a[2]) && (((B==3)+(E==5))==a[3]))
{
printf("%d %d %d %d %d\n",A,B,C,D,E);f=1;
}
}
if(f==0)
printf("Sorry\n");
}
}