酷代码 AI
菜单
服务商

P1016禾木分核桃 普及- 新手组 贪心 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2795/3291 题目描述 教室里有 n ( 1 ≤ n ≤ 100 ) n(1≤n≤100) 位同学,每位同学都有若干颗核桃,第 i i 位同学拥有 a i ( 0 ≤ a i ≤ 100 ) a i ​ (0≤a i ​ ≤100) 颗核桃。 禾木带来了满满的一箱核桃,他今天的目标是分给一些同学核桃,使得这 n n 位同学拥有的核桃的数量都相同。 但是核桃吃多了会长胖,所以禾木希望在满足 每位同学拥有的核桃数量都相同 前提下,分给这 n n 位同学的核桃总数尽可能地少。 问:禾木至少需要分给 n n 位同学的核桃总数是多少? 注: 禾木只能分出去核桃,而不能抢夺同学们手中的核桃; 本题假设全程没有同学偷偷把自己的核桃吃掉; 本题假设禾木拥有的核桃是可以保证每位同学拥有相同数量的核桃的(足够多); 禾木分出去的核桃都是整数个(没有破损的核桃)。 输入格式 输入的第一行包含一个整数 n ( 1 ≤ n ≤

```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >> n; int a[105]; int sum = 0; // 读取每个同学的核桃数并计算总和 for (int i = 0; i < n; i++) { cin >> a[i]; sum += a[i]; } // 计算初始的平均核桃数 int average = sum / n; // 若平均有剩余,需要增加平均核桃数以满足要求 if (sum % n != 0) { average++; } // 计算需要额外分配的核桃数 int result = 0; for (int i = 0; i < n; i++) { if (a[i] < average) { result += average - a[i]; } } cout << result << endl; return 0; } ``` 代码解释: 1. 输入处理:首先读取同学的数量`n`,接着用数组`a`存储每个同学初始的核桃数,同时累加所有同学的核桃总数存于`sum`。 2. 计算平均核桃数:求出初始的平均核桃数`average`,若总和`sum`不能被`n`整除,需要将平均核桃数加 1,保证有足够的核桃分给每位同学。 3. 计算需额外分配的核桃数:遍历数组`a`,若某个同学的核桃数小于平均核桃数,就计算出该同学需要的额外核桃数,并累加到`result`中。 4. 输出结果:输出`result`,即禾木至少需要分出去的核桃总数。 [2026-02-07 18:37:04 | AI问答 | 404点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多