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; }