이 문제에서는 원의 각도를 기반으로 하는 원의 조각을 나타내는 배열이 제공됩니다. 우리의 임무는 C++에서 주어진 원의 두 부분의 가장 작은 각도 차이를 찾는 프로그램을 만드는 것입니다. .
문제 설명 - 배열에 있는 원의 모든 조각의 각도가 주어집니다. 만든 두 조각의 각도 차이가 가장 작도록 조각을 연결해야 합니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력
ang[] = {90, 45, 90, 135}

출력
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