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)`,在大多数情况下是高效的。希望这个程序能满足你的需求!如果有任何问题或需要进一步优化,请告诉我。 ######[AI写代码神器 | 709点数解答 | 2024-10-24 18:50:31]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)163
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)182
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- 破解Jenkins构建Java项目“数据收集等待过长”难题的实用攻略( | 389点数解答 | 2024-01-18 09:27:30)342
- Jenkins 构建 Java 项目“数据收集等待过长”难题的 10 大解决策略(百度文心 | 551点数解答 | 2024-01-18 09:27:54)299
- C++ 求解整数减少至 0 使奇数次数最少的最小纠结次数问题(字节豆包 | 229点数解答 | 2024-08-21 16:33:58)272
- C++ 实现按复杂规则计算业务员工资,附完整代码!(字节豆包 | 337点数解答 | 2024-11-18 17:48:36)298
- C++ 实现:求解二进制字符串中消除连续 m 个 0 的最少操作次数(GPT | 876点数解答 | 2024-11-30 23:07:54)224
- 奇幻游戏积分排序:奇数升序偶数降序,Python代码轻松搞定!(DeepSeek | 233点数解答 | 2025-04-12 17:08:17)224
- C++实现奇幻游戏积分排序:奇数升序偶数降序!(DeepSeek | 237点数解答 | 2025-04-12 17:09:06)242
- 星际编码大赛终极对决:机械星AI与异星人激战“逆序对”统计难题(字节豆包 | 509点数解答 | 2025-04-19 17:33:00)298