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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP