目录
一、题目内容
二、思路
思路1
思路2
思路3
三、代码实现
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
思路:
第一步:首先对5名选手进行排序。
第二步:由于题目说每位选手都说对了一半,如何将这句话转化为编程语言?【突破口】
第三步:打印名次。
注:细节在下文中。
他们的排名都有可能是1、2、3、4名,可以使用for循环的嵌套来穷举所有的可能性。
#include
int main()
{//a、b、c、d赋值成多少都无所谓int a = 1;int b = 2;int c = 3;int d = 4;int e = 5;//使用for循环的嵌套穷举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++){}}}}}return 0;
}
每个人都都说对一半,那该怎么转化编程语言呢?
以A选手为例子:
A选手说:B第二,我第三
转化为编程语言:(b == 2)+(a == 3) == 1
解释:假设a说b第二为真(返回1),a第三为假(返回0),相加起来就是1,恰好和题中“每人都说对一半”相呼应。
#include
int main()
{//a、b、c、d赋值成多少都无所谓int a = 1;int b = 2;int c = 3;int d = 4;int e = 5;//使用for循环的嵌套穷举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 //a说&& (b == 2) + (e == 4) == 1 //b说&& (c == 1) + (d == 2) == 1 //c说&& (c == 5) + (d == 3) == 1 //d说&& (e == 4) + (a == 1) == 1) //e说{}}}}}}return 0;
}
#include
int main()
{//a、b、c、d赋值成多少都无所谓int a = 1;int b = 2;int c = 3;int d = 4;int e = 5;//使用for循环的嵌套穷举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 //a说&& (b == 2) + (e == 4) == 1 //b说&& (c == 1) + (d == 2) == 1 //c说&& (c == 5) + (d == 3) == 1 //d说&& (e == 4) + (a == 1) == 1) //e说{printf("a:%d b:%d c:%d d:%d e:%d\n", a, b, c, d, e);}}}}}}return 0;
}
程序结果:

从程序结果中发现:有些选手的名次重复了,这时可以再加上a*b*c*d*e==120来避免重复
#include
int main()
{//a、b、c、d赋值成多少都无所谓int a = 1;int b = 2;int c = 3;int d = 4;int e = 5;//使用for循环的嵌套穷举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 //a说&& (b == 2) + (e == 4) == 1 //b说&& (c == 1) + (d == 2) == 1 //c说&& (c == 5) + (d == 3) == 1 //d说&& (e == 4) + (a == 1) == 1) //e说{if (a * b * c * d * e == 120)//避免重复{printf("a的名次:%d\nb的名次:%d\nc的名次:%d\nd的名次:%d\ne的名次:%d\n", a, b, c, d, e);}} }}}}}return 0;
}
程序运行结果:

总结:这题的关键在于如何将第二步转化为编程语言。
2023年1月17日
上一篇:对于搞钱我们是认真的