Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C เรียงสามเหลี่ยมตามพื้นที่


สมมติว่าเรามีอาร์เรย์ของรูปสามเหลี่ยมหลายรูป โดยที่สามเหลี่ยม[i] =[ai, bi, ci] เป็นด้านของรูปสามเหลี่ยม ith เราจะต้องจัดเรียงสามเหลี่ยมตามพื้นที่ของมัน พื้นที่ของสามเหลี่ยมโดยใช้ด้านคือ:สแควร์รูทของ 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
  • ผลตอบแทน (a + b + c) * (a + b - c) * (a - b + c) * (-a + b + c)
  • จากวิธีหลัก ให้ทำดังนี้:
  • สำหรับการเริ่มต้น i :=0 เมื่อ i
  • สำหรับการเริ่มต้น j :=i + 1 เมื่อ j
  • ถ้า square(a[i])> square(a[j]) แล้ว:
    • สลับ a[i] และ a[j]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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)