C++程式:查詢給定圓形兩部分角度的最小差值


在本文中,我們將使用C++程式語言查詢給定圓形兩部分之間角度的最小差值。在繼續編寫程式碼之前,讓我們先了解如何計算角度以找到它們之間的最小差值。

給定陣列中圓形所有部分的角度。我們必須以角度差值最小的方式連線這些部分。

讓我們透過輸入和輸出場景來更好地理解。在這裡,我們宣告一個數組,其中包含如下所示的圓形的三個不同角度:

輸入

 ang[] = {160, 120, 80}

輸出

 40

解釋

在這個輸入和輸出場景中,給定三個部分的角度:120°、80°和160°,我們想要連線其中的兩個部分以形成角度差值最小的扇區。

步驟1:我們可以選擇120°和80°的部分。兩個角度之和是120°和80°,總計為(120 + 80 = 200)。

步驟2:組合角度與剩餘部分(160°)之間的差值為:[ |(120° + 80°) - 160°| = |200° - 160°| = 40° ]

以下是我們繪製角度的圓形圖

解決方案方法

在這裡,我們必須合併所有部分以構成兩部分。為此,我們需要取連續的部分(例如,我們不能將ang1和ang3放在一起)。

讓我們取部分1的角度為A。

那麼部分2的角度將為360 - A。

差值為|A - (360 - A)|。我們取絕對值,因為只能有正角度。

解差值方程:

2 * |A - 180|,這需要是最小值。為此,我們將嘗試合併圓形的所有可能部分,並找到(2*|A - 180|)的最小值。

示例

以下是使用C++查詢給定圓形兩部分角度最小差值的程式:

#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[] = { 160, 120, 80 };
   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 40

更新於:2024年5月22日

211 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.