একটি ত্রিভুজের পরিমাপ (perimeter) P দেওয়া আছে। পরিমাপ হল ত্রিভুজের সব বাহুর যোগফল। লক্ষ্য হল সমান পরিমাপ বিশিষ্ট কতগুলো কোণযুক্ত ত্রিভুজ (right triangles) বানানো সম্ভব তা বের করা।
বাহু a, b, c হলে a+b+c=P এবং a²+b²=c² (পিথাগোরাস থিওরেম যেকোনো কম্বিনেশনের জন্য)।
a=1 থেকে p/2 এবং b=a+1 থেকে p/3 পর্যন্ত চেক করা হয়। c = p-a-b। সব কোণযুক্ত ত্রিভুজের জন্য পিথাগোরাস থিওরেম প্রয়োগ করা হয়। a, b, c ত্রিভুজ বানানোর শর্তও পূরণ করতে হবে (যেকোনো দুটি বাহুর যোগফল তৃতীয়টির চেয়ে বড়)।
উদাহরণ
ইনপুট: Perimeter P=12
আউটপুট: মোট কোণযুক্ত ত্রিভুজ: ১
ব্যাখ্যা: একমাত্র a=4, b=3, c=5 শর্ত পূরণ করে: 4+3+5=12, 3²+4²=5² (9+16=25), 3+4>5, 4+5>3, 3+5>4।
ইনপুট: Perimeter P=10
আউটপুট: মোট কোণযুক্ত ত্রিভুজ: ০
ব্যাখ্যা: a+b+c=P এবং a²+b²=c² সন্তুষ্টকারী কোনো মান নেই।
অ্যাপ্রোচ
- perimeter ইন্টিজার ভেরিয়েবলে পরিমাপ।
rightTriangles(int p)ফাংশন পরিমাপ গ্রহণ করে সম্ভাব্য কোণযুক্ত ত্রিভুজের সংখ্যা রিটার্ন করে।- count=0, c=0।
- for a=1 থেকে p/2 এবং b=1 থেকে p/3: c=p-a-b।
- ত্রিভুজ শর্ত: a+b>c && b+c>a && a+c>b।
- পিথাগোরাস: a*a+b*b==c*c। সত্য হলে count++।
- নোট: শুধু একটি কম্বিনেশনে পিথাগোরাস চেক করা হয় অনন্য ফলাফলের জন্য।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int rightTriangles(int p) {
int count = 0;
int c = 0;
for (int a = 1; a < p/2; a++) {
for (int b = 1; b < p/3; b++) {
c = p - a - b;
if (a + b > c && b + c > a && a + c > b) {
if ((a*a + b*b) == c*c) {
++count;
}
}
}
}
return count;
}
int main() {
int perimeter = 12;
cout << "Total number of right triangles that can be formed: " << rightTriangles(perimeter);
return 0;
}
আউটপুট
Total number of right triangles that can be formed: 1