hdu-1034(模拟+小朋友分糖)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1034

参考文章:https://blog.csdn.net/zyy173533832/article/details/37990885

题意:如果老师要每个小朋友的糖的数目相同,进行如下调整:从0号小朋友开始,将自己的糖的一半分给他右手边的小朋友,

如果糖数是奇数,老师就给他一块糖。

求经过多少次操作得到每个小朋友的糖的数目相同,还有小朋友们糖的数目相同的时候每个小朋友得到多少糖。

思路:模拟,建立一个二维数组,分别存储要分得的糖和已经有的糖。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[1010][2],n;
int pd()
{
    int i;
    for(i=0;i<n;i++)
    {
        a[i][0]+=a[i][1];
        if(a[i][0]%2) a[i][0]++;
    }
    for(i=1;i<n;i++)
    {
        if(a[i][0]!=a[i-1][0]) return 0;
    }
    return 1;
}
int main(void)
{
    int i;
    while(~scanf("%d",&n))
    {
        if(n==0) break;
        memset(a,0,sizeof(a));
        for(i=0;i<n;i++) scanf("%d",&a[i][0]);
        int ans=0;
        while(1)
        {
            if(pd()) break;
            ans++;
            for(i=0;i<n;i++)
            {
                int r=(i+1)%n;
                a[r][1]=a[i][0]/2;
                a[i][0]/=2;
            }
        }
        cout<<ans<<" "<<a[0][0]<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/2018zxy/p/9745857.html