이 문제에서는 원의 각도를 기반으로 하는 원의 조각을 나타내는 배열이 제공됩니다. 우리의 임무는 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