C++程序:查找环形站立人员中的对手


假设我们有三个数字a、b和c。有k个学生(k为偶数)站在一个圆圈上,他们按顺时针方向从1到k编号。我们不知道k的值。每个人都通过圆的中心观察,可以看到站在圆圈另一侧的对手。编号为'a'的人看着编号为'b'的人。我们必须找到哪个人的位置与编号为'c'的人相对。如果找不到,则返回-1。

问题类别

编程中的各种问题可以通过不同的技术来解决。要解决一个问题,我们首先必须设计一个算法,为此我们必须详细研究特定问题。如果同一个问题反复出现,可以使用递归方法;或者,我们也可以使用迭代结构。可以使用if-else和switch case等控制语句来控制程序中逻辑的流程。有效地使用变量和数据结构可以提供更简单的解决方案以及轻量级、低内存需求的程序。我们必须查看现有的编程技术,例如分治法、贪婪编程、动态规划,并找出它们是否可以。这个问题我们可以用一些数学逻辑来解决。请遵循以下内容以更好地理解这种方法。

因此,如果我们问题的输入类似于a = 6;b = 2;c = 4,则输出将为8,因为圆圈中有8个学生。编号为6的学生会看到编号为2的学生,而编号为8的学生会看到编号为4的学生。

步骤

要解决这个问题,我们将遵循以下步骤:

n := |a - b|
if a > n or b > n or c > n, then:
   return -1
Otherwise
   return (n / 2 + c - 1) mod n + 1

示例

让我们来看下面的实现,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c){
   int n = abs(a - b) * 2;
   if (a > n || b > n || c > n)
      return -1;
   else
      return (n / 2 + c - 1) % n + 1;
}
int main(){
   int a = 6;
   int b = 2;
   int c = 4;
   cout << solve(a, b, c) << endl;
}

输入

6, 2, 4

输出

8

更新于:2022年4月8日

浏览量:108

开启您的职业生涯

完成课程获得认证

开始学习
广告