A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
值得注意的是比赛成绩可以并列,即有多个第一或第二名。
在该系列for循环中,如果没有跳出环节,程序将陷入死循环,故而无法得出结果。
#include<stdio.h>
#include<windows.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int flag = 0;
int n = 0;
for (a = 0; a <= 5; a++)
{
for (b = 0; b <= 5; b++)
{
for (c = 0; c <= 5; c++)
{
for (d = 0; d <= 5; d++)
{
for (e = 0; e <= 5; e++)
{
if (((b == 2) + (a == 3) == 1) &&
((b == 2) + (e == 4) == 1) &&
((c == 1) + (d == 2) == 1) &&
((c == 5) + (d == 3) == 1) &&
((e == 4) + (a == 1) == 1) == 1)
{
n |= (1 << (a - 1));
n |= (1 << (b - 1));
n |= (1 << (c - 1));
n |= (1 << (d - 1));
n |= (1 << (e - 1));
/*假设a为0000 0001
b为0000 0010
.......
a-1 0000 0000
b-1 0000 0001
1 << (a-1) 0000 0001
1 << (b-1) 0000 0010
n |= (1 << (a-1))0000 0001
n |= (1 << (b-1))0000 0011*/
if (n == 1 || n == 3 || n == 7 || n == 15 ||n == 31)
/*比赛成绩可并列
不可并列时条件应为n=31*/
printf("a = %d b = %d c = %d d = %d e = %d\n", a, b, c, d, e);
n = 0;//跳出循环
}
}
}
}
}
}
system("pause");
return 0;
}