酷代码 AI
菜单
服务商

c程序:舞会配对身高差小于d

好的,下面是一个C程序,用于解决舞会配对问题,其中每对舞伴的身高差必须小于给定的值 `d`。假设我们有两个数组,分别表示男生和女生的身高。 ```c #include <stdio.h> #include <stdlib.h> // 比较函数,用于qsort排序 int compare(const void *a, const void *b) { return (*(int *)a - *(int *)b); } int main() { int n; // 男生和女生的数量 int d; // 身高差的最大值 printf("请输入男生和女生的数量: "); scanf("%d", &n); printf("请输入身高差的最大值: "); scanf("%d", &d); int *boys = (int *)malloc(n * sizeof(int)); int *girls = (int *)malloc(n * sizeof(int)); printf("请输入男生的身高:\n"); for (int i = 0; i < n; i++) { scanf("%d", &boys[i]); } printf("请输入女生的身高:\n"); for (int i = 0; i < n; i++) { scanf("%d", &girls[i]); } // 对男生和女生的身高进行排序 qsort(boys, n, sizeof(int), compare); qsort(girls, n, sizeof(int), compare); int count = 0; // 记录符合条件的配对数 int j = 0; // 女生数组的指针 for (int i = 0; i < n; i++) { while (j < n && girls[j] - boys[i] < d) { j++; } if (j < n && abs(girls[j] - boys[i]) <= d) { count++; j++; // 配对成功后,女生指针前移 } } printf("符合条件的配对数: %d\n", count); free(boys); free(girls); return 0; } ``` 解释 1. 输入部分: - 用户输入男生和女生的数量 `n` 和身高差的最大值 `d`。 - 用户依次输入男生和女生的身高。 2. 排序: - 使用 `qsort` 函数对男生和女生的身高进行排序,以便后续高效地查找符合条件的配对。 3. 配对逻辑: - 使用两个指针 `i` 和 `j` 分别遍历男生和女生的身高数组。 - 对于每个男生 `boys[i]`,找到第一个符合条件的女生 `girls[j]`,即 `abs(girls[j] - boys[i]) <= d`。 - 如果找到符合条件的配对,则计数器 `count` 增加,并且女生指针 `j` 前移,继续寻找下一个配对。 4. 输出结果: - 输出符合条件的配对数。 5. 内存释放: - 释放动态分配的内存。 这个程序的时间复杂度主要由排序决定,为 `O(n log n)`,在大多数情况下是高效的。希望这个程序能满足你的需求!如果有任何问题或需要进一步优化,请告诉我。 [2024-10-24 18:50:31 | AI写代码神器 | 709点数解答]

相关提问
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]