在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 次瀏覽

開始你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.