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


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

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

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

         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

更新于:2021年1月16日

68 次浏览

开始你的职业生涯

完成课程获得认证

开始学习
广告