【C语言每日一题】猜名次

简介: 【C语言每日一题】猜名次

💡前言🌞:


大伙们好!😄又到了小陈每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用C语言实现——猜名次~这个题目很有意思,新颖的同时又很值得思考!我现在迫不及待地要和大家分享~!😄🤗🤗


💛猜名次题目💛


💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡


5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:


A选手说:B第二,我第三;


B选手说:我第二,E第四;


C选手说:我第一,D第二;


D选手说:C最后,我第三;


E选手说:我第四,A第一;


比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。


💪 解题思路的分享💪


考虑到一共五个人,直接模拟推理有些太难,计算机最擅长的遍历此时就会派上用场,将每个人从第1到第5来一遍,则一共会产生5^5种可能性。

我们只需要写出一个五重的循环就能搞定它,对于这道题目而言,循环可以轻易地遍历所有结果。

仔细阅读题目,将五人的话分别化为条件项写在 if() 语句中,即可写出代码。

但是我们这样单纯的循环并不能够完美地解决问题,可能会出现重复的情况,即出现了两个第二名,或者3个第四名这样的情况。

为了避免出现这样的情况,我们要加入条件语句来筛选,查看在满足条件的情况下名次是否重复,用if语句来将重复的情况筛选掉即可。


😊题目源码的分享😊


#include <stdio.h>
int checkData(int *p)
{
  int tmp[7] = { 0 }; 
  int i;
  for (i = 0; i < 5; i++)
  {
    if (tmp[p[i]]) //如果这个位置的标记已经是1,则代表重复,返回0。
    {
      return 0;
    }
    tmp[p[i]] = 1; //如果不是,则将这个位置标记为1。
  }
  return 1; //如果全部标记完毕也没有出现重复的情况,代表OK。
}
int main()
{
  int p[5]; //0 1 2 3 4分别代表a b c d e
  for (p[0] = 1; p[0] <= 5; p[0]++)
  {
    for (p[1] = 1; p[1] <= 5; p[1]++)
    {
      for (p[2] = 1; p[2] <= 5; p[2]++)
      {
        for (p[3] = 1; p[3] <= 5; p[3]++)
        {
          for (p[4] = 1; p[4] <= 5; p[4]++) //五层循环遍历
          {
                    //这是五个人的描述,比较表达式只有0和1两个结果,如果要两个条件有且只有一个为真,则可以用比较表达式的值总和为1的方式直接判定。别忘了还要判定不能并列。
            if ((p[1] == 2) + (p[0] == 3) == 1 && //B第二,我第三
              (p[1] == 2) + (p[4] == 4) == 1 && //我第二,E第四
              (p[2] == 1) + (p[3] == 2) == 1 && //我第一,D第二
              (p[2] == 5) + (p[3] == 3) == 1 && //C最后,我第三
              (p[4] == 4) + (p[0] == 1) == 1 && //我第四,A第一
              checkData(p) //不能并列
              )
            {
              for (int i = 0; i < 5; i++)
              {
                printf("%d ", p[i]);
              }
              printf('\n');
            }
          }
        }
      }
    }
  }
  return 0;
}


👉 本菜鸡&总结 👈


本篇文章旨在分享C语言详解【C语言每日一题】——猜名次。🤠希望我的文章能够让大家有所收获!🙋‍♂️我的方法只是很暴力的五重循环,效率很低,如果有路过的大佬看到的话,还请不吝赐教!😀😀😀大佬们如果对我的文章有什么建议,或者认为那里写的不好,请在评论区写下您宝贵的意见!😀如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!🌞🌞🌞


相关文章
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
87 0
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
185 0
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
76 0
|
C语言
【C语言练习】求名次、找凶手
【C语言练习】求名次、找凶手
78 0
|
C语言
C语言:猜名次
题目: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三;
|
C语言
C语言解决逻辑分析题(猜凶手)(猜名次)
C语言解决逻辑分析题(猜凶手)(猜名次)
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
69 0
|
C语言 C++
C语言练习之猜名次-----A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;
C语言练习之猜名次-----A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;
|
算法 C语言 C++
【C语言每日一题】——猜名次
猜名次🙌 猜名次 题目描述:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
95 0
C语言刷题(6)(猜名次)——“C”
C语言刷题(6)(猜名次)——“C”