C语言:猜名次

简介: 题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;

题目:

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

           

A选手说:B第二我第三

B选手说:我第二E第四

C选手说:我第一D第二

D选手说:C最后我第三

E选手说:我第四A第一

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


思路:

总体思路:

1 表示 ,用 0 表示

因为 都说对了一半,所以有

一半 + 另一半 = 1

只有一半为 真,即 1;另一半为 假,即 0

(一).

创建变量 A B C D E

           

组合排列所有情况:

因为有 5个名次,所以每个人都有 5种可能

可以用 for循环 循环5次 表示 5种可能

因为一个名次只能有一个            

例如:如果A是第一名,那么其它四人中就不可能有第一名,

所以5个人 5个for循环 应该是嵌套着的

               

(二).

把符合所有人说的情况全部列出来使用 if条件判断语句判断条件即是5人说的情况

           

满足条件后还要确定5个名次各只出现一次

A * B * C * D * E == 120

(1 * 2 * 3 * 4 * 5 == 120)

           

进行打印

     

第一步:

(1).

创建变量 A B C D E

           

(2).

组合排列所有情况:

因为有 5个名次,所以每个人都有 5种可能

可以用 for循环 循环5次 表示 5种可能          

因为一个名次只能有一个

例如:如果A是第一名,那么其它四人中就不可能有第一名,

所以5个人 5个for循环 应该是嵌套着的

                   

实现代码:

#include <stdio.h>
int main()
{
  //创建变量:
  int A = 0;
  int B = 0;
  int C = 0;
  int D = 0;
  int E = 0;
  //组合排列所有情况:
  for (A = 1; A <= 5; A++)
    //A的所有可能性(5个名次)
  {
    for (B = 1; B <= 5; B++)
      //B的所有可能性(5个名次)
    {
      for (C = 1; C <= 5; C++)
        //C的所有可能性(5个名次)
      {
        for (D = 1; D <= 5; D++)
          //D的所有可能性(5个名次)
        {
          for (E = 1; E <= 5; E++)
            //E的所有可能性(5个名次)
          {
          }
        }
      }
    }
  }
  return 0;
}

实现图片:

image.png

第二步:

把符合所有人说的情况全部列出来

         

(1).

使用 if条件判断语句判断条件即是5人说的情况            

(2).

满足条件后还要确定5个名次各只出现一次

A * B * C * D * E == 120

(1 * 2 * 3 * 4 * 5 == 120)

           

(3).

进行打印

实现代码:

#include <stdio.h>
int main()
{
  //创建变量:
  int A = 0;
  int B = 0;
  int C = 0;
  int D = 0;
  int E = 0;
  //组合排列所有情况:
  for (A = 1; A <= 5; A++)
    //A的所有可能性(5个名次)
  {
    for (B = 1; B <= 5; B++)
      //B的所有可能性(5个名次)
    {
      for (C = 1; C <= 5; C++)
        //C的所有可能性(5个名次)
      {
        for (D = 1; D <= 5; D++)
          //D的所有可能性(5个名次)
        {
          for (E = 1; E <= 5; E++)
            //E的所有可能性(5个名次)
          {
            //组合排列了所有情况后,把符合所有人说的情况全列出来:
            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))
            {
              //确定5个名次各只出现一次:
              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;
}

实现图片:

45cd6656f2ed4edeb5b59863626db075.png

最终代码和实现效果

最终代码:

#include <stdio.h>
int main()
{
  //创建变量:
  int A = 0;
  int B = 0;
  int C = 0;
  int D = 0;
  int E = 0;
  //组合排列所有情况:
  for (A = 1; A <= 5; A++)
    //A的所有可能性(5个名次)
  {
    for (B = 1; B <= 5; B++)
      //B的所有可能性(5个名次)
    {
      for (C = 1; C <= 5; C++)
        //C的所有可能性(5个名次)
      {
        for (D = 1; D <= 5; D++)
          //D的所有可能性(5个名次)
        {
          for (E = 1; E <= 5; E++)
            //E的所有可能性(5个名次)
          {
            //组合排列了所有情况后,把符合所有人说的情况全列出来:
            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))
            {
              //确定5个名次各只出现一次:
              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;
}

实现效果:

a8503155e1d94eb3b3d06e78784cf7b3.png 

相关文章
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
91 0
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
191 0
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
81 0
|
C语言
【C语言练习】求名次、找凶手
【C语言练习】求名次、找凶手
82 0
|
C语言
C语言解决逻辑分析题(猜凶手)(猜名次)
C语言解决逻辑分析题(猜凶手)(猜名次)
|
C语言
【C语言每日一题】猜名次
【C语言每日一题】猜名次
108 0
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
71 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第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
103 0