【C语言走进现实】猜名次

简介: 猜名次

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


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


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


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


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


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


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


我们先把这几个人说的话转换成计算机语言


A选手说:B第二,我第三; b == 2  a == 3


B选手说:我第二,E第四; b == 2  e == 4


C选手说:我第一,D第二; c == 1  d == 2


D选手说:C最后,我第三; c == 5  d == 3


E选手说:我第四,A第一; e == 4  a == 1


因为每个人都说对了一半所以把每个人说的话两句加一块并与其他人的并一块

((b == 2) + (a == 3)==1) &&
((b == 2) + (e == 4)==1) && 
((c == 1) + (d == 2)==1) &&
((c == 5) + (d == 3)==1) &&
((e == 4) + (a == 1)==1)

同时用5个for循环嵌套,把所有的可能性都穷举出来


如下:

for (a = 1; a <= 5; a++)
  {
  for (b = 1; b <= 5; b++)
  {
    for (c = 1; c <= 5; c++)
    {
    for (d = 1; d <= 5; d++)
    {
      for (e = 1; e <= 5; e++)
      {
      if (((b == 2) + (a == 3)==1) && 
        ((b == 2) + (e == 4)==1) && 
        ((c == 1) + (d == 2)==1) &&
        ((c == 5) + (d == 3)==1) &&
        ((e == 4) + (a == 1)==1))
      {
        printf("a是第%d名 b是第%d名 c是第%d名 d是第%d名 e是第%d名\n", a, b, c, d, e);
      }
      }
    }
    }
  }


我们如果调试一下就会发现结果不唯一。


这是因为当a或b或c或d或e中,如果两个或者三个变量的值相等时,可能也满足判断条件


所以在原有的判断条件上,我们需要再加一条筛选合适的结果。


当a、b、c、d、e分别为5 、 4、 3、 2、 1中的一个值且不能重复时,那么a*b*c*d*e=120。

9001919ff732acf5358109048959e171_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png


所以我们添加的条件为

if (a * b * c * d * e == 120)
{
    printf("a是第%d名 b是第%d名 c是第%d名 d是第%d名 e是第%d名\n", a, b, c, d, e);
    }

代码实现:

#include<stdio.h>
int main()
{
  int a, b, c, d, e;
  for (a = 1; a <= 5; a++)
  {
  for (b = 1; b <= 5; b++)
  {
    for (c = 1; c <= 5; c++)
    {
    for (d = 1; d <= 5; d++)
    {
      for (e = 1; e <= 5; e++)
      {
      if (((b == 2) + (a == 3)==1) && 
        ((b == 2) + (e == 4)==1) && 
        ((c == 1) + (d == 2)==1) &&
        ((c == 5) + (d == 3)==1) &&
        ((e == 4) + (a == 1)==1))
      {
        if (a * b * c * d * e == 120)
        {
        printf("a是第%d名 b是第%d名 c是第%d名 d是第%d名 e是第%d名\n", a, b, c, d, e);
        }
      }
      }
    }
    }
  }
  }
  return 0;
}
相关文章
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
87 0
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
186 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语言每日一题】猜名次
106 0
|
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第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
97 0