解题思路:
可以把这个问题看作是一个循环分配的过程,由于是圆桌,1号和5号小朋友也是相邻的。可以利用数组来模拟每个小朋友手中的糖果数量,通过计算每个小朋友分配后的糖果情况,更新数组中的值。通过模运算对索引进行处理后,代码可以应对不同数量的小朋友,只需调整v.resize()的参数即可。
注意事项:
需要使用模运算来确保前后小朋友的索引循环。
这题可以选择把相邻这个条件分为左右两边分别处理,由于人数为5,索引为0-4。
则原索引为:01234
处理左边条件后的索引变为:40123
处理右边条件后的索引变为:12340
加上模运算后不难发现,处理左边条件后的索引可变为4%5 5%5 6%5 7%5 8%5。
再结合人数为5和原索引的信息可推:
左索引可变为:(5-1+0)%5 (5-1+1)%5 (5-1+2)%5 (5-1+3)%5 (5-1+4)%5
右索引可变为:(0+1)%5 (1+1)%5 (2+1)%5 (3+1)%5 (4+1)%5
这样做这两个索引就与相邻的两个小朋友是一一对应的,处理结束。
参考代码:
#include <iostream> #include <vector> #include <iomanip> using namespace std; int main() { vector<int> v; v.resize(5); for(int & index : v) { cin >> index; } for(int index=0; index<v.size(); index++) { v[index] /= 3; v[(v.size()-1+index)%v.size() ] += v[index]; // 给前一个小朋友 v[(index+1)%v.size()] += v[index]; // 给后一个小朋友 } for(int & index : v) { cout << setw(5) << setfill(' ') << index; } return 0; }
0.0分
0 人评分
格式错误一万年,,有没有过了的来看看(终于过了)浏览:942 |
C二级辅导-求偶数和 (C语言代码)浏览:659 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:1392 |
C二级辅导-计负均正 (C语言代码)浏览:652 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:575 |
printf基础练习2 (C语言代码)浏览:321 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:732 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:903 |
1126题解浏览:649 |