【问题描述】某市有n个医院,编号1~n,其中第i个医院的位置可以表示为一个平面整数坐标(x,y)。为了方便预约挂号就医,请根据市民位置(X,Y),查询据其最近的三个医院,如果多个医院距离相同,编号较小的视为最近。 【输入形式】输入n+1行,第一行包含用空格分开的三个整数n、X和Y,分别表示医院数量和市民所在位置。第二行到第n+1行输入n个医院的坐标x和y。 【输出形式】输出共3行,按照距离由近到远,一次输出距离该市民最近的三个医院编号。 编写c语言代码
时间: 2024-02-15 21:06:10 浏览: 48
以下是C语言代码实现:
```c
#include <stdio.h>
#include <math.h>
typedef struct {
int id;
int x;
int y;
double distance;
} Hospital;
double getDistance(int x1, int y1, int x2, int y2) {
return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
int main() {
int n, x, y, i, j, k;
scanf("%d %d %d", &n, &x, &y);
Hospital hospitals[n];
for (i = 0; i < n; i++) {
scanf("%d %d", &hospitals[i].x, &hospitals[i].y);
hospitals[i].id = i + 1;
hospitals[i].distance = getDistance(x, y, hospitals[i].x, hospitals[i].y);
}
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (hospitals[i].distance > hospitals[j].distance) {
Hospital temp = hospitals[i];
hospitals[i] = hospitals[j];
hospitals[j] = temp;
}
}
}
for (i = 0; i < 3; i++) {
printf("%d\n", hospitals[i].id);
}
return 0;
}
```
代码思路如下:
1. 定义一个结构体 `Hospital`,包含医院的编号、横纵坐标和距离市民的距离。
2. 定义一个计算距离的函数 `getDistance`,用于计算市民和医院之间的距离。
3. 读入医院数量和市民的坐标,以及每个医院的坐标,计算每个医院和市民之间的距离。
4. 按照距离排序,使用冒泡排序算法。
5. 输出距离市民最近的三个医院的编号。
阅读全文