【C语言每日一题】——猜名次
- 前言
- 猜名次
- 解题思路分享:
- 解题源码分享:
- 总结撒花
博客昵称:博客小梦
最喜欢的座右铭:全神贯注的上吧!!!
作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
博主小留言:哈喽!各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!
前言
哈喽各位友友们,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!我仅已此文,和大家分享【C语言每日一题】——猜名次~ 将现实中的生活问题转化为代码讲述,非常有意思的一到题目~ 都是精华内容,可不要错过哟!!!
猜名次
猜名次
题目描述:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
解题思路分享:
- 这是一道和十分有意思的题目。考虑到一共五个人,直接模拟推理有些太难,可以利用遍历所有可能性来解决。
- 将每个人从第1到第5来一遍,则一共会产生5^5种可能性,这个只需要一个5层循环即可搞定。
- 多看几遍五个人描述的话语和题目所给的提示。并用代码写出相应的 if ()中的判断语句 。
- 但是这样会导致一些不期望出现的结果出现,但是会出现两个人或者更多的人名次相同的情况,例如两个第1,三个第2这样的,所以即使满足了条件,也要查看一下五个人的名次是否重复。 所以在if的判断条件中将这些进行一个把控,将重复的情况进行一个筛选控制即可。
解题源码分享:
#includeint main(){int a = 0, b = 0, c = 0, d = 0, e = 0;for (int i = 1; i < 5; i++){a = i;for (int j = 1; j <= 5; j++){b = j;for (int k = 1; k <= 5; k++){c = k;for (int l = 1; l <= 5; l++){d = l;for (int m = 1; m <= 5; m++){e = m;if ((b == 2 || a == 3) &&( b == 2 || e == 4) && (c == 1 || d == 2 )&&(c == 5 || d == 3 )&&( e == 4 || a == 1) && (a != b) && (a != c)&& (a != d) && (a != e )&&( b != c) &&( b != d ) && (b != e) && (c!= d)&& (c != e )&& (d != e)){printf("a = %d,b = %d,c = %d. d = %d,e = %d\n",a,b,c,d,e);}}}}}} return 0;}
程序输出结果验证:
然后我通过程序运行的结果和题目内容对比后,是符合题目要求的答案。
总结撒花
本篇文章旨在分享C语言详解【C语言每日一题】——猜名次。希望大家通过阅读此文有所收获!但是我觉得我实现的这个算法的效率有点低,要用到五层循环,各位聪明的uu们有没有更高效的解题算法呢?有的话可以私信笨笨的小梦,教教俺!!!如果我写的有什么不好之处,请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~