用递归函数在C语言中巧妙找出n枚硬币里的那枚假币!
```c #include <stdio.h> // 计算指定范围内硬币重量之和 int getsum(int *p, int start, int end) { int sum = 0; for (int i = start; i <= end; i++) { sum += p[i]; } return sum; } // 递归查找 int findfakecoin(int *p, int low, int high) { // 若只有一枚硬币,它就是 if (low == high) { return low; } int mid = (low + high) / 2; int sumLeft = getsum(p, low, mid); int sumRight = getsum(p, mid + 1, high); // 若左边重量轻,在左边 if (sumLeft < sumRight) { return findfakecoin(p, low, mid); } // 若右边重量轻,在右边 else if (sumLeft > sumRight) { return findfakecoin(p, mid + 1, high); } // 若两边重量相等,在右边 else { return findfakecoin(p, mid + 1, high); } } int main() { int coins[n]; int m; int index; int getsum(int *p, int start, int end); int findfakecoin(int *p, int low, int high); scanf("%d", &m); for (int i = 0; i < m; ++i) { // 此处添加输入硬币重量的代码 } index = findfakecoin(coins, 0, m - 1); printf("的索引是:%d\n", index); return 0; } ``` 额外需要注意的逻辑点: 1. 注意边界情况的处理,比如只有一枚硬币或两端硬币数量不等的情况。 2. 要确保输入的硬币重量数据的有效性和正确性。 3. 递归的深度可能会受到硬币数量的影响,要注意可能出现的栈溢出问题。 ######[AI写代码神器 | 497点数解答 | 2024-12-02 22:03:42]
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)338
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)358
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Python 实现:带边界处理与验证的任意基数数字转换递归程序(字节豆包 | 198点数解答 | 2024-11-21 14:20:25)434
- Python 递归函数实现:将数字转换为指定基数的输出(百度文心 | 499点数解答 | 2024-11-22 09:58:55)336
- 编程模拟:偶数张牌经 k 次洗牌后第 p 张牌编号求解(DeepSeek | 126点数解答 | 2026-01-05 12:15:30)30
- 螺旋矩阵:根据输入行列号精准求出对应位置数字的算法揭秘(DeepSeek | 740点数解答 | 2026-01-05 12:16:41)51
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)355
- 用 Pandas 深入分析招聘数据:从数据读取到可视化全流程解析(GPT | 1539点数解答 | 2024-06-30 15:56:50)367
- C++ 破解数字游戏:找出数组添加全排列后相同数字最大数量(字节豆包 | 456点数解答 | 2025-02-27 18:56:24)270
- C++助力小小李老师:求解数组添加排列后最多相同数字数量(字节豆包 | 424点数解答 | 2025-03-01 14:46:52)219
- C++助力小小李老师:破解数组数字游戏最高得分之谜(字节豆包 | 434点数解答 | 2025-03-05 07:50:34)237