এই সমস্যাটিতে, আমাদেরকে একটি অ্যারে দেওয়া হয়েছে যা একটি বৃত্তের কোণের উপর ভিত্তি করে একটি বৃত্তের অংশকে বোঝায়। আমাদের কাজ হল C++ এ একটি প্রদত্ত বৃত্তের দুটি অংশের কোণের ক্ষুদ্রতম পার্থক্য খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা .
সমস্যা বর্ণনা − আমাদের অ্যারের মধ্যে বৃত্তের সমস্ত অংশের কোণ দেওয়া হয়েছে। আমাদের টুকরোটিকে এমনভাবে যুক্ত করতে হবে যাতে তৈরি করা দুটি অংশের কোণের ক্ষুদ্রতম পার্থক্য থাকে।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
ইনপুট
ang[] = {90, 45, 90, 135}
আউটপুট
90
ব্যাখ্যা
1ম এবং 2য় একসাথে নেওয়া অর্থাৎ 90 + 45 =135।
3য় এবং 4র্থ একসাথে নেওয়া যেমন 90 + 135 =225
পার্থক্য =225 - 135 =90
সমাধান পদ্ধতি
এখানে, আমাদের দুটি অংশ তৈরি করতে সমস্ত অংশ একত্রিত করতে হবে। এবং এর জন্য, আমাদের ক্রমাগত অংশ নিতে হবে (উদাহরণস্বরূপ আমরা ang1 এবং ang3 একসাথে নিতে পারি না)।
অংশ 1-এর কোণ 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