मान लीजिए हमारे पास विभिन्न त्रिभुजों का एक सरणी है जहां triangles[i] = [ai, bi, ci] ये i-वें त्रिभुज की भुजाएं हैं। हमें त्रिभुजों को उनके क्षेत्रफल के आधार पर सॉर्ट करना है। भुजाओं द्वारा त्रिभुज का क्षेत्रफल है: p*(p-a)*(p-b)*(p-c) का वर्गमूल जहां p = (a+b+c)/2।
उदाहरण के लिए, यदि इनपुट (7, 24, 25), (5, 12, 13), (3, 4, 5) है, तो आउटपुट (3, 4, 5), (5, 12, 13), (7, 24, 25) होगा।
हल करने के चरण
- भुजाओं a, b और c के साथ त्रिभुज ऑब्जेक्ट परिभाषित करें
- square() फंक्शन परिभाषित करें, जो Triangle t लेगा:
- a := t.a
- b := t.b
- c := t.c
- return (a + b + c) * (a + b - c) * (a - b + c) * (-a + b + c)
- मुख्य विधि से, निम्नलिखित करें:
- i := 0 से शुरू करें, जब i < N, i को 1 से बढ़ाते हुए करें:
- j := i + 1 से शुरू करें, जब j < N, j को 1 से बढ़ाते हुए करें:
- यदि square(a[i]) > square(a[j]), तो a[i] और a[j] को स्वैप करें
- j := i + 1 से शुरू करें, जब j < N, j को 1 से बढ़ाते हुए करें:
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#include <stdio.h> #define N 3 struct Triangle{ int a, b, c; }; int square(struct Triangle t){ int a = t.a, b = t.b, c = t.c; return (a + b + c)*(a + b - c)*(a - b + c)*(-a + b + c); } void solve(struct Triangle* a){ for (int i = 0; i < N; i++) for (int j = i + 1; j < N; j++) if (square(a[i]) > square(a[j])){ struct Triangle temp = a[i]; a[i] = a[j]; a[j] = temp; } } int main(){ struct Triangle triangles[N] = {{7, 24, 25}, {5, 12, 13}, {3, 4, 5}}; solve(triangles); for (int i = 0; i < N; i++){ printf("(%d, %d, %d)\n", triangles[i].a, triangles[i].b, triangles[i].c); } } इनपुट
{{7, 24, 25}, {5, 12, 13}, {3, 4, 5}}आउटपुट
(3, 4, 5) (5, 12, 13) (7, 24, 25)