#include<stdio.h> int num[110],temp[110]; int main() { int n; int i,j,k; int ok,sum; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&num[i]); ok=0; sum=0; while(!ok) { for(i=1;i<=n;i++) {//通过循环判断相邻两个是否相等及是否数据完全循环比较过 //来判断数据是否都相等 if(num[i]==num[i+1]) { if(i==n-1) ok=1; } else break; } //一次操作之后num[i]==num[i+1]/2+num[i]/2 //将一次操作分成两步,新建一个数组用来缓冲 for(i=1;i<=n;i++) { if(i==1) temp[n]=num[i]/2; else temp[i-1]=num[i]/2; } for(i=1;i<=n;i++) { num[i]=num[i]/2+temp[i]; if(num[i]%2==1) { sum++; num[i]++; } } } printf("%d\n",sum); } return 0; }
原文:http://blog.csdn.net/wangluoershixiong/article/details/44314351