Giả sử chúng ta có một dãy các tam giác khác nhau trong đó các tam giác [i] =[ai, bi, ci] là các cạnh của tam giác thứ i. Chúng ta sẽ phải sắp xếp các hình tam giác dựa trên diện tích của chúng. Diện tích của một tam giác tính theo các cạnh là:căn bậc hai của p * (p-a) * (p-b) * (p-c) trong đó p =(a + b + c) / 2.
Vì vậy, nếu đầu vào là (7, 24, 25), (5, 12, 13), (3, 4, 5), thì đầu ra sẽ là (3, 4, 5), (5, 12, 13 ), (7, 24, 25)
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định đối tượng tam giác với các cạnh a, b và c
- Xác định một hàm square (), điều này sẽ lấy Triangle t,
- a:=t.a
- b:=t.b
- c:=t.c
- return (a + b + c) * (a + b - c) * (a - b + c) * (-a + b + c)
- Từ phương thức chính, hãy thực hiện như sau:
- để khởi tạo i:=0, khi i
- để khởi tạo j:=i + 1, khi j
- if square (a [i])> square (a [j]), thì:
- hoán đổi [i] và [j]
- để khởi tạo j:=i + 1, khi j
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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); } }
Đầu vào
{{7, 24, 25}, {5, 12, 13}, {3, 4, 5}}
Đầu ra
(3, 4, 5) (5, 12, 13) (7, 24, 25)