5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
思路讲解:
ABCDE每一个人的名次都有五种情况,通过利用嵌套循环来遍历每一个人排名的情况。又因为比赛结束后,每位选手都说对了一半,所以
A选手说:B第二+我第三 == 1;
B选手说:我第二+E第四 == 1;
C选手说:我第一+D第二 == 1;
D选手说:C最后+我第三 == 1;
E选手说:我第四+A第一 ==1;
同时要用逻辑与&& 将五句话整合起来
具体方法:
我们可以先创建一个大小为5的数组,然后创建五个指针分别指向数组的第一个元素表示A,第二个元素表示B,第三个元素表示C,第四个元素表示D,第五个元素表示E。之后每一个指针循环五次来表示每个人可能的排名都有五个,最好再进行上述的判断,输出结果即可
#include <stdio.h>
int main()
{
int arr[5];
char ch = 'A';
int* pa = arr;
int* pb = arr + 1;
int* pc = arr + 2;
int* pd = arr + 3;
int* pe = arr + 4;
for (*pa = 1; *pa <= 5; (*pa)++)
{
for (*pb = 1; *pb <= 5; (*pb)++)
{
for (*pc = 1; *pc <= 5; (*pc)++)
{
for (*pd = 1; *pd <= 5; (*pd)++)
{
for (*pe = 1; *pe <= 5; (*pe)++)
{
if ((*pb == 2) + (*pa == 3) == 1 &&
(*pb == 2) + (*pe == 4) == 1 &&
(*pc == 1) + (*pd == 2) == 1 &&
(*pc == 5) + (*pd == 3) == 1 &&
(*pe == 4) + (*pa == 1) == 1 &&
*pa * *pb * *pc * *pd * *pe == 120)
{
for (int i = 0; i < 5; i++)
{
printf("%c=%d ", ch++, arr[i]);
}
printf("\n");
}
}
}
}
}
}
return 0;
}
运行结果: