在 C++ 中确定规则 N 边形上第三人的位置?

c++server side programmingprogramming

在 N 边形中,如果两个孩子站在 A 和 B 顶点上,那么我们需要确定另一个人应该站的顶点号,以便该人到达 A 和 B 所需的跳跃次数最少。

这里要注意的两个条件是多边形顶点按顺时针方向编号,如果有多个答案,我们将始终选择编号最小的顶点。

vertexPosition(int sides, int vertexA, int vertexB) 取多边形的边数和顶点 A 和 B 的位置。for 循环从 1 开始,迭代直到 i 小于或等于边数。如果 i 不等于顶点 A 和顶点 B,则计算 i 与顶点 A 之间的绝对差,类似地,计算 i 与顶点 B 之间的绝对差,并分别保存到 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,并将当前索引值分配给 position 变量。我们在 if 语句中检查获得的新总和是否小于存储在 tempSum 中的先前总和,以便我们返回 N 可能距离 A 和 B 最近的点。循环完成迭代后,返回位置。

          sum = x + y;
           if (sum < tempSum){
            tempSum = sum;
            position = i;
         }
      }
   }
    return position;
}

示例

让我们看看以下实现,以确定第三人在正 N 边多边形上的位置。

#include <iostream>
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

相关文章