能用C语言写 给定 n 个坐标,求其中 3 个坐标能表示一个等腰三角形的组数
时间: 2023-05-25 15:02:36 浏览: 207
等腰三角形.c
可以使用三重循环枚举三个点,然后判断它们是否能构成等腰三角形。
具体来说,我们可以钦定其中一个点为三角形的顶点,然后枚举另外两个点作为底边的两个端点。判断它们与顶点的距离是否相等即可。
具体的代码实现如下:
```c
#include <stdio.h>
#include <math.h>
typedef struct {
int x;
int y;
} point;
double distance(point a, point b) {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main() {
int n;
scanf("%d", &n);
point points[n];
for (int i = 0; i < n; i++) {
scanf("%d%d", &points[i].x, &points[i].y);
}
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
for (int k = j+1; k < n; k++) {
double d1 = distance(points[i], points[j]);
double d2 = distance(points[i], points[k]);
double d3 = distance(points[j], points[k]);
if (d1 == d2 || d1 == d3 || d2 == d3) {
count++;
}
}
}
}
printf("%d\n", count);
return 0;
}
```
其中,`distance` 函数计算两个点之间的距离,`count` 用来记录能构成等腰三角形的组数。三重循环依次枚举三个点,并使用 `distance` 函数计算它们之间的距离。如果三条边中有两条边的长度相等,则说明它们可以构成一个等腰三角形,此时将 `count` 加 1。
最终,输出 `count` 即可。
阅读全文