【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们有没有更高效的解题算法呢?有的话可以私信笨笨的小梦,教教俺!!!如果我写的有什么不好之处,请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~