【寒假每日一题】DAY.9 猜名次
创始人
2024-05-13 02:51:10

目录

 一、题目内容

二、思路

                思路1

                思路2

                思路3

三、代码实现


一、题目内容


5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

思路:

第一步:首先对5名选手进行排序。

第二步:由于题目说每位选手都说对了一半,如何将这句话转化为编程语言?【突破口】

第三步:打印名次。

注:细节在下文中。

第一步:首先对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日

相关内容

热门资讯

俗话说:人丑就多读书 但是在清... 清朝读书长得好才是王道,这是很多读者都比较关心的问题,接下来就和各位读者一起来了解,给大家一个参考。...
关羽如果不大意失荆州,诸葛亮北... 关羽如果不大意失荆州,诸葛亮北伐有可能成功吗?下面趣历史小编为大家详细介绍一下相关内容。关羽如果不失...
卧龙凤雏得一人可安天下?为何刘... 卧龙凤雏得一人可安天下?为何刘备两人具得还是败了?下面趣历史小编为大家详细介绍一下相关内容。东汉末年...
清朝对皇子的教育到底有多重视 ... 很多人都不了解清朝皇子读书的事情,接下来跟着趣历史小编一起欣赏。清朝皇子读书一年就放五天假?没错,就...
建军节战友聚会祝酒词 建军节战... 8.1建军节战友聚会祝酒词 [主题] 聚会酒 [背景] 正值建军节到来之际,老战友们相聚...