【每日一题2019-11-17】-蓝桥杯 prev32 分糖果
1.问题描述
有 n 个有 n 个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分一半给左手边的孩子。一轮分糖后,拥有奇数颗糖的孩子由老师补给 1 个糖果,从而变成偶数。反复进行这个游戏,直到所有小朋友的糖果数都相同为止。你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果
2.输入格式
程序首先读入一个整数 N(2 < N < 100),表示小朋友的人数。接着是一行用空格分开的 N 个偶数(每个偶数不大于1000,不小于2)
3.样例输入
3
2 2 4
4.样例输出
- 要求程序输出一个整数,表示老师需要补发的糖果数。
4
5.分析
考点— 简 单 模 拟 \color{red}简单模拟 简单模拟
用
candy
存放每个人的糖果用
halfcandy
存放 一半的糖果
6.代码
#include<iostream>
#include<stdio.h>
using namespace std;
int n, res = 0;
int candy[101], halfCandy[101];
bool check()
{
bool flag = true;
for (int i = 0; i < n - 1; ++i)
{
if (candy[i] != candy[i + 1]) // 糖果不相等
{
flag = false;
break;
}
}
if (!flag)
{
for (int i = 0; i < n; ++i) {
if (candy[i] % 2) // 如果是奇数
{
++res;
++candy[i];
}
}
}
return flag;
}
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%d", &candy[i]);
do
{
for (int i = 0; i < n; ++i)
halfCandy[i] = candy[i] / 2;
for (int i = 0; i < n - 1; ++i)
candy[i] = halfCandy[i] + halfCandy[i+1];
candy[n - 1] = halfCandy[n - 1] + halfCandy[0];
} while (!check()); // 先执行后判断
cout << res;
return 0;
}