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
广告