基於面積對三角形進行排序的C程式
假設我們有一個包含不同三角形的陣列,其中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
- 返回 (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]
- 如果 square(a[i]) > square(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)
", 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)
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP