C++基础题——糖果游戏(糖果分配问题)

【题目描述】某幼儿园里,有5个小朋友编号为1、2、3、4、5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。
【输入】

5个小朋友的糖果数。

【输出】

游戏后5个小朋友的糖果数。(按5位宽度输出)

【输入样例】

   8 9 10 11 12

【输出样例】

   11 7 9 11 6


【思路分析】

  1. 变量定义与初始化
    • M:定义小朋友的数量为5。
    • candy[5]:一个整型数组,用于存储每个小朋友手中的糖果数量。
    • cost:一个整型变量,用于存储每个小朋友分给左右两边小朋友的糖果数量。
    • 注意:reminder变量在后续的优化中被移除,因为我们直接通过整除操作忽略了余数部分。
  2. 输入糖果数量
    • 使用一个for循环,从标准输入读取每个小朋友手中的糖果数量,并存储在candy数组中。
  3. 糖果分配逻辑
    • 再次使用一个for循环,遍历每个小朋友。
    • 在循环内部,首先计算每个小朋友可以分给左右两边小朋友的糖果数量(cost = candy[i] / 3)。
    • 然后,更新当前小朋友手中的糖果数量(实际上是更新为0份,因为余数被“吃掉”了,即candy[i] = cost)。
    • 接下来,使用取模运算实现循环数组的效果,将糖果分给左边和右边的小朋友(candy[(i + M - 1) % M] += costcandy[(i + 1) % M] += cost)。
  4. 输出结果
    • 使用一个for循环,遍历candy数组,并使用setw(5)设置输出宽度,使输出结果更加整洁。
    • 最后,输出一个换行符,使输出结果更加清晰。

【代码实现】

#include 
#include 
using namespace std;

const int M = 5;

int main(){
    int candy[5];
    int cost=0;
    int reminder=0;
    for(int i=0;i>candy[i];
    }
    for(int i=0;i

你可能感兴趣的:(c++,数据结构,算法)