Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình tìm hiệu số góc nhỏ nhất của hai phần của một đường tròn trong C ++

Trong bài toán này, chúng ta được cung cấp một mảng biểu thị phần của hình tròn dựa trên các góc của hình tròn. Nhiệm vụ của chúng tôi là tạo một chương trình để tìm sự khác biệt nhỏ nhất của các góc của hai phần của một hình tròn nhất định trong C ++ .

Mô tả sự cố - Chúng tôi được cung cấp các góc của tất cả các phần của hình tròn trong mảng. Chúng ta cần nối mảnh sao cho hai mảnh được tạo ra có góc chênh lệch nhỏ nhất.

Hãy lấy một ví dụ để hiểu vấn đề

Đầu vào

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

Chương trình tìm hiệu số góc nhỏ nhất của hai phần của một đường tròn trong C ++

Đầu ra

90

Giải thích

Lấy thứ nhất và thứ hai cùng nhau, tức là 90 + 45 =135.

Đồng hạng 3 và 4 tức là 90 + 135 =225

Chênh lệch =225 - 135 =90

Phương pháp tiếp cận giải pháp

Ở đây, chúng ta phải hợp nhất tất cả các bộ phận để tạo thành hai phần. Và để làm được điều đó, chúng ta cần tổng hợp các phần liên tục (trong ví dụ, chúng ta không thể ghép ang1 và ang3 lại với nhau).

Hãy lấy góc của phần 1 là A.

Khi đó góc của phần 2 sẽ là 360 - A.

Sự khác biệt sẽ là | A - (360 - A) |. Chúng tôi đã coi trọng giá trị tuyệt đối vì chỉ có thể là các góc dương.

Giải phương trình chênh lệch,

2 * | A - 180 |, giá trị này cần phải là giá trị nhỏ nhất. Và vì vậy, chúng tôi sẽ cố gắng hợp nhất tất cả các phần có thể có của hình tròn và tìm giá trị nhỏ nhất cho (2 * | A - 180 |).

Chương trình minh họa hoạt động của giải pháp của chúng tôi

Ví dụ

#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;
}

Đầu ra

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