C程序:巧用贪心算法解决舞会男女身高配对难题
要解决这个问题,我们可以采用贪心算法。具体步骤如下: 1. 读取输入:首先读取输入的 `n` 和 `d`,以及所有人的身高。 2. 排序:将所有人的身高进行排序。 3. 配对:从最矮的人开始,尝试为每个人找到一个符合条件的舞伴(即身高差不超过 `d`)。如果能够成功配对 `n` 对,则输出 `yes`,否则输出 `no`。 下面是具体的 C 程序实现: ```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, d; scanf("%d %d", &n, &d); int heights[2 * n]; for (int i = 0; i < 2 * n; i++) { scanf("%d", &heights[i]); } // 对身高进行排序 qsort(heights, 2 * n, sizeof(int), compare); // 尝试配对 int pairs = 0; for (int i = 0; i < 2 * n; i++) { if (pairs == n) { break; // 已经配对完成 } for (int j = i + 1; j < 2 * n; j++) { if (heights[j] - heights[i] <= d) { // 找到一个符合条件的舞伴 pairs++; // 标记已经配对的人 heights[j] = -1; break; } } } if (pairs == n) { printf("yes\n"); } else { printf("no\n"); } return 0; } ``` 解释 1. 输入读取:首先读取 `n` 和 `d`,然后读取 `2n` 个整数表示每个人的身高。 2. 排序:使用 `qsort` 函数对身高数组进行排序。 3. 配对: - 初始化配对计数器 `pairs` 为 0。 - 遍历排序后的身高数组,对于每个身高 `heights[i]`,尝试找到一个符合条件的舞伴 `heights[j]`(即 `heights[j] - heights[i] <= d`)。 - 如果找到符合条件的舞伴,增加配对计数器 `pairs`,并将 `heights[j]` 标记为已配对(设置为 -1)。 4. 输出结果:如果最终配对计数器 `pairs` 等于 `n`,则输出 `yes`,否则输出 `no`。 这个算法的时间复杂度主要由排序决定,为 \(O(2n \log 2n)\),在给定的输入范围内是高效的。 ######[AI写代码神器 | 657点数解答 | 2024-10-24 18:45:51]
- 军队院校学员BMI合格人数统计程序揭秘(字节豆包 | 137点数解答 | 2025-04-15 11:10:36)235
- Python 实现贪心算法:巧解找零钱问题及需注意要点 (字节豆包 | 398点数解答 | 2025-01-04 18:06:11)116
- C++ 破解“国王游戏”弱化版:贪心排序算法巧求最少最大奖赏(DeepSeek | 550点数解答 | 2025-04-28 18:16:50)393
- 巧妙贪心排序:解决国王游戏中大臣奖赏最大化问题(DeepSeek | 1002点数解答 | 2025-05-10 20:58:15)190
- C++ 实现:用贪心算法解国王游戏(弱化版),使大臣获赏最大值最小(DeepSeek | 507点数解答 | 2025-05-10 20:59:01)173
- 2024 STEMA T6:解密T1188超难密码锁,Python区间DP解法揭秘!(字节豆包 | 718点数解答 | 2025-11-08 22:09:01)88
- DotA 1vN 难题:巧用贪心策略最小化 HP 损耗!(DeepSeek | 609点数解答 | 2026-01-01 00:14:47)25
- P1016禾木分核桃问题:巧用贪心算法求解最少分配核桃数(字节豆包 | 404点数解答 | 2026-02-07 18:37:04)25
- CSP - J组:小核桃将积木堆成不超m堆的最小能量计算及代码详解(字节豆包 | 780点数解答 | 2026-02-07 18:38:58)17
- Python切片操作巧解经典算法:二维数组90°旋转(阿里通义 | 205点数解答 | 2023-10-31 11:05:29)332
- 揭秘iOS开发:常用算法大集合,提升应用性能与体验!(阿里通义 | 246点数解答 | 2023-11-08 00:43:08)286
- 深入解析:Vue2.x与Vuex3.x渲染器的Diff算法奥秘(阿里通义 | 222点数解答 | 2023-11-09 01:35:41)359