酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

c语言现在有n枚硬币,其中有一枚是假的,假的硬币比真币轻,但也只轻一点点,而**和真币的外观是一模一样的,从外观上无法辨别硬币的真假,请写程序找出**。 程序的要求: 必须使用递归调用函数实现 递归函数原型必须为:int findfakecoin(int *p, int low, int high) 程序中必须包含函数:int getsum(int *p, int start, int end) main函数已经写好,请编写程序剩余部分的代码并提交。 main函数如下: 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

```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. 递归的深度可能会受到硬币数量的影响,要注意可能出现的栈溢出问题。 [2024-12-02 22:03:42 | AI写代码神器 | 497点数解答]

相关提问