इस समस्या में, हमें एक सरणी दी गई है जो एक वृत्त के कोणों के आधार पर एक वृत्त के टुकड़े को दर्शाती है। हमारा कार्य C++ में दिए गए वृत्त के दो भागों के कोणों का सबसे छोटा अंतर खोजने के लिए एक कार्यक्रम बनाना है ।
समस्या का विवरण - हमें सरणी में वृत्त के सभी टुकड़ों के कोण दिए गए हैं। हमें टुकड़े को इस तरह मिलाना है कि बने दो टुकड़ों में कोण का सबसे छोटा अंतर हो।
समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट
ang[] = {90, 45, 90, 135}
आउटपुट
90
स्पष्टीकरण
पहली और दूसरी को एक साथ लेना यानी 90 + 45 =135.
तीसरा और चौथा एक साथ लेना यानी 90 + 135 =225
अंतर =225 - 135 =90
समाधान दृष्टिकोण
यहाँ, हमें दो भागों को बनाने के लिए सभी भागों को मिलाना होगा। और उसके लिए, हमें निरंतर भाग लेने की आवश्यकता है (उदाहरण के लिए हम ang1 और ang3 को एक साथ नहीं ले सकते हैं)।
मान लें कि part1 का कोण A है।
तब भाग 2 का कोण 360 - A होगा।
अंतर होगा |ए - (360 - ए) |। हमने निरपेक्ष मान लिया है क्योंकि केवल सकारात्मक कोण ही हो सकते हैं।
अंतर समीकरण को हल करना,
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. है