啊我摔倒了..有没有人扶我起来学习....
题目
问:5
位运动员参加了10
米台跳水比赛,有人让他们预测比赛结果:
A
选手说:B
第二,我第三;
B
选手说:我第二,E
第四;
C
选手说:我第一,D
第二;
D
选手说:C
最后,我第三;
E
选手说:我第四,A
第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次
输入描述:
无
输出描述:
输出为一行
解法
1. 确定思路
- 首先,我们观察到选手名都是字符型,比赛名次是整型
- 其次每个人说话都是对了一半,我们想到用真为
1
,假为0
表示,那么对一半的意思就转化为,把每个选手说的两句话的结果加起来就是1 + 0 == 1
- 如此一来,只能通过遍历所有情况,再用这个条件进行判断
2. 编写代码
- 根据上述思路,选手名都是字符型,比赛名次是整型,那就用选手名和比赛名次建立循环
对应代码:
for (int A = 1; A <= 5; A++)
{
for (int B = 1; B <= 5; B++)
{
for (int C = 1; C <= 5; C++)
{
for (int D = 1; D <= 5; D++)
{
for (int E = 1; 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))
{
printf("A=%d,B=%d,C=%d,D=%d,E=%d\n", A, B, C, D, E);
}
- 这时打印出来看看:
- 我去。。!这么多种情况
- 仔细观察会发现,原来有同名次的情况
- 假如不想要同名次,咱们再加个限制条件来打印
if (A + B + C + D + E == 15 && A * B * C * D * E == 120)
printf("A=%d,B=%d,C=%d,D=%d,E=%d", A, B, C, D, E);
- 再看一下结果:
嘿嘿~完美解决!
附上整个代码
#include<stdio.h>
int main()
{
for (int A = 1; A <= 5; A++)
{
for (int B = 1; B <= 5; B++)
{
for (int C = 1; C <= 5; C++)
{
for (int D = 1; D <= 5; D++)
{
for (int E = 1; 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))
{
if (A + B + C + D + E == 15 && A * B * C * D * E == 120)
printf("A=%d,B=%d,C=%d,D=%d,E=%d", A, B, C, D, E);
}
}
}
}
}
}
return 0;
}