在 C++ 中确定第三人在规则 N 边多边形上的位置?
在N边多边形中,如果两个孩子站在A和B顶点上,那么我们需要确定另一个人应该站立的顶点数,以便该人到达A和B所需的跳跃次数最少。
这里要注意的两个条件是多边形顶点以顺时针方式编号,如果有多个答案,我们将始终选择编号最少的顶点。
在vertexPosition(intsides,intvertexA,intvertexB)采用无。多边形的边数以及顶点A和B的位置。for循环从1开始并迭代,直到i小于或等于边数。如果i不等于vertexA和vertexB,则计算i和顶点A之间以及i和vertexB之间的绝对差并分别保存到x和y。
int vertexPosition(int N, int vertexA, int vertexB){ int tempSum = INT_MAX; int sum = 0; int position = 0; for (int i = 1; i <= N; i++) { if (i != vertexA && i != vertexB){ int x = abs(i - vertexA); int y = abs(i - vertexB);
接下来我们将x和y的总和保存到sum变量并检查总和是否小于tempSum。如果它小于tempSum,则将当前和值分配给tempSum,并将当前索引值分配给位置变量。我们在if语句中检查获得的新总和是否小于存储在tempSum中的先前总和,以便我们返回最接近的位置N可能来自A和B。在循环完成迭代后返回该位置。
sum = x + y; if (sum < tempSum){ tempSum = sum; position = i; } } } return position; }
示例
让我们看看下面的实现来确定第三个人在规则N边多边形上的位置。
#include输出结果using namespace std; int vertexPosition(int N, int vertexA, int vertexB){ int tempSum = INT_MAX; int sum = 0; int position = 0; for (int i = 1; i <= N; i++) { if (i != vertexA && i != vertexB){ int x = abs(i - vertexA); int y = abs(i - vertexB); sum = x + y; if (sum < tempSum){ tempSum = sum; position = i; } } } return position; } int main(){ int N = 6, vertexA = 2, vertexB = 4; cout << "The vertex on which N should stand = " << vertexPosition(N, vertexA, vertexB); return 0; }
上面的代码将产生以下输出-
The vertex on which N should stand = 6