酷代码 AI
菜单

3-3 航点排序 分数 15 无人机一条航线由多个航点组成,航点主要信息有航点编号、经度和维度, 其中航点编号取值范围为1~255。请编写程序,使用冒泡排序算法对编号无序的多个航点按航点编号递增排序,并重新设置航点编号,第一个航点编号为1,后续编号依次增1。优化算法,当数据有序时程序结束,输出排序总趟数,以及排序后设置航点前后的航点信息。 输入格式: 输入第一行给出一个正整数 n(1<=n<=10), 随后 n 行,每行给出一个航点的信息:编号 经度 维度。其中编号取值范围为 1~255,经度取值范围为-180°~180°,维度取值范围为-90°~90°。 输出格式: 排序趟数单独占一行。每个航点占一行,航点信息以空格隔开,经度和维度保留6位小数。 输入样例: 5 1 100.23 50.12 3 101.78 54.56 5 103.98 52.12 6 104.76 51.78 4 100.65 50.65 输出样例: Total sorting: 2 Before: 1 100.230000 50.120000 3 101.780000 54.560000 4 100.6

```c #include <stdio.h> // 定义航点结构体 typedef struct { int id; double longitude; double latitude; } Waypoint; // 交换两个航点的函数 void swap(Waypoint *a, Waypoint *b) { Waypoint temp = *a; *a = *b; *b = temp; } // 冒泡排序函数 int bubbleSort(Waypoint arr[], int n) { int i, j; int sorted = 0; int totalPasses = 0; for (i = 0; i < n - 1 && !sorted; i++) { sorted = 1; for (j = 0; j < n - i - 1; j++) { if (arr[j].id > arr[j + 1].id) { swap(&arr[j], &arr[j + 1]); sorted = 0; } } totalPasses++; } return totalPasses; } // 重新设置航点编号 void resetIds(Waypoint arr[], int n) { for (int i = 0; i < n; i++) { arr[i].id = i + 1; } } // 输出航点信息 void printWaypoints(Waypoint arr[], int n) { for (int i = 0; i < n; i++) { printf("%d %.6f %.6f\n", arr[i].id, arr[i].longitude, arr[i].latitude); } } int main() { int n; scanf("%d", &n); Waypoint waypoints[10]; for (int i = 0; i < n; i++) { scanf("%d %lf %lf", &waypoints[i].id, &waypoints[i].longitude, &waypoints[i].latitude); } int totalPasses = bubbleSort(waypoints, n); printf("Total sorting: %d\n", totalPasses); printf("Before:\n"); printWaypoints(waypoints, n); resetIds(waypoints, n); printf("After:\n"); printWaypoints(waypoints, n); return 0; } ``` [2025-12-29 18:41:13 | AI问答 | 541点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多