1 条题解
-
0
核心逻辑
解决分糖果问题需遵循“依次操作、邻部分配”规则,关键步骤如下:
- 初始化数据:用数组存储5个小朋友的初始糖果数(编号1-5,围成圆桌,1号邻5号和2号,5号邻4号和1号)。
- 分糖果操作(按1-5号顺序):
- 每个小朋友将当前糖果数 整除3(多余糖果吃掉,取商为
div3); - 自己留
div3颗糖果,剩余两份(各div3颗)分别分给 左右相邻 的小朋友(处理边界:1号左邻5号,5号右邻1号)。
- 每个小朋友将当前糖果数 整除3(多余糖果吃掉,取商为
- 格式化输出:一轮操作后,按每个数占5个字符宽度(右对齐)输出结果。
代码实现
C
#include <stdio.h> int main() { int candy[6]; // 索引1-5对应1-5号小朋友,索引0不用 // 读取5个小朋友的初始糖果数 for (int i = 1; i <= 5; i++) { scanf("%d", &candy[i]); } // 按1-5号顺序分糖果 for (int i = 1; i <= 5; i++) { int div3 = candy[i] / 3; // 均分3份,多余吃掉(整数除法自动取商) candy[i] = div3; // 自己留1份 // 确定左右邻居(边界处理) int left = (i == 1) ? 5 : i - 1; // 1号左邻5号,其他左邻i-1 int right = (i == 5) ? 1 : i + 1; // 5号右邻1号,其他右邻i+1 candy[left] += div3; // 左邻分1份 candy[right] += div3; // 右邻分1份 } // 按5位宽度输出结果 for (int i = 1; i <= 5; i++) { printf("%5d", candy[i]); } printf("\n"); return 0; }C++
#include <bits/stdc++.h> using namespace std; int main() { int candy[6]; // 索引1-5对应1-5号 for (int i = 1; i <= 5; i++) { cin >> candy[i]; } for (int i = 1; i <= 5; i++) { int div3 = candy[i] / 3; candy[i] = div3; int left = (i == 1) ? 5 : i - 1; int right = (i == 5) ? 1 : i + 1; candy[left] += div3; candy[right] += div3; } // setw(5)控制宽度为5,默认右对齐 for (int i = 1; i <= 5; i++) { cout << setw(5) << candy[i]; } cout << endl; return 0; }Python
# 初始化数组:索引1-5对应1-5号,输入按顺序存入 candy = [0] + list(map(int, input().split())) # candy[0]不用 # 依次处理1-5号小朋友 for i in range(1, 6): div3 = candy[i] // 3 # 整除3,多余吃掉 candy[i] = div3 # 自己留1份 # 确定左右邻居 left = 5 if i == 1 else i - 1 right = 1 if i == 5 else i + 1 candy[left] += div3 candy[right] += div3 # 按5位宽度输出(切片candy[1:]取1-5号数据) print(''.join(f'{x:5d}' for x in candy[1:]))验证(样例输入
8 9 10 11 12)- 处理1号:8//3=2 → 1号留2,5号+2(12→14),2号+2(9→11);
- 处理2号:11//3=3 → 2号留3,1号+3(2→5),3号+3(10→13);
- 处理3号:13//3=4 → 3号留4,2号+4(3→7),4号+4(11→15);
- 处理4号:15//3=5 → 4号留5,3号+5(4→9),5号+5(14→19);
- 处理5号:19//3=6 → 5号留6,4号+6(5→11),1号+6(5→11);
最终结果:11 7 9 11 6,按5位宽度输出为11 7 9 11 6,与样例一致。
- 1
信息
- ID
- 452
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 31
- 已通过
- 8
- 上传者