Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C ++의 일반 N면 다각형에서 세 번째 사람의 위치를 ​​​​결정하시겠습니까?

<시간/>

N 면 다각형에서 두 아이가 A와 B 정점에 서 있다면 우리는 다른 사람이 서 있어야 하는 정점 번호를 결정해야 그 사람이 A와 B에 모두 도달하는 데 필요한 최소 점프 횟수가 있어야 합니다.

여기서 주목해야 할 두 가지 조건은 다각형 꼭짓점에 시계 방향으로 번호가 매겨져 있고 답이 여러 개인 경우에 대비하여 항상 번호가 가장 적은 꼭짓점을 선택한다는 것입니다.

vertexPosition(int 측, int vertexA, int vertexB)은 아니오를 취합니다. 다각형의 변의 수와 꼭짓점 A와 B의 위치. for 루프는 1에서 시작하여 i가 변의 수보다 작거나 같을 때까지 반복합니다. i가 vertexA 및 vertexB와 같지 않으면 i와 vertex 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에 할당되고 현재 인덱스 값이 위치 변수에 할당됩니다. 획득한 새 합계가 tempSum에 저장된 이전 합계보다 작은지 if 문에 저장되어 있지 않은지 확인하여 가장 가까운 위치 N이 A와 B에서 나올 수 있도록 반환합니다. 루프가 완료되면 해당 위치가 반환됩니다.

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

예시

정다각형의 정다각형에서 3인칭 위치를 결정하기 위해 다음의 구현을 살펴보자.

#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