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

C++에서 주어진 원의 두 부분의 가장 작은 각도 차이를 찾는 프로그램

<시간/>

이 문제에서는 원의 각도를 기반으로 하는 원의 조각을 나타내는 배열이 제공됩니다. 우리의 임무는 C++에서 주어진 원의 두 부분의 가장 작은 각도 차이를 찾는 프로그램을 만드는 것입니다. .

문제 설명 - 배열에 있는 원의 모든 조각의 각도가 주어집니다. 만든 두 조각의 각도 차이가 가장 작도록 조각을 연결해야 합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

ang[] = {90, 45, 90, 135}

C++에서 주어진 원의 두 부분의 가장 작은 각도 차이를 찾는 프로그램

출력

90

설명

1위와 2위를 합하면 90 + 45 =135입니다.

3위와 4위를 합하면 90 + 135 =225

차이 =225 - 135 =90

솔루션 접근 방식

여기서는 모든 부분을 병합하여 두 부분을 만들어야 합니다. 그리고 이를 위해 연속 부분을 취해야 합니다(예에서 ang1과 ang3을 함께 사용할 수 없음).

part1의 각도를 A로 합시다.

그러면 part2의 각도는 360 - A가 됩니다.

차이는 |A - (360 - A)|입니다. 양의 각도만 있을 수 있으므로 절대값을 사용했습니다.

미분방정식 풀기,

2 * |A - 180|, 최소값이어야 합니다. 그리고 이를 위해 원의 가능한 모든 부분을 병합하고 (2*|A - 180|)의 최소값을 찾습니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
#include <math.h>
using namespace std;
int CalcSmallDiffAng(int ang[], int n) {
   int Left = 0, A = 0, minDiff = 360;
   for (int i = 0; i < n; i++) {
      A += ang[i];
      while (A >= 180) {
         minDiff = min(minDiff, 2 * abs(180 - A));
         A -= ang[Left];
         Left++;
      }
      minDiff = min(minDiff, 2 * abs(180 - A));
   }
   return minDiff;
}
int main() {
   int ang[] = { 90, 45, 90, 135 };
   int n = sizeof(ang) / sizeof(ang[0]);
   cout<<"The smallest difference of angles of two parts of a given
   circle is "<<CalcSmallDiffAng(ang, n);
   return 0;
}

출력

The smallest difference of angles of two parts of a given circle is 90