纯粹的模拟,貌似也有规律的,反正我是模拟过的。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n; int stu[1001]; int main(void) { while(scanf("%d",&n)!=EOF,n!=0) { int ans = 0; for(int i=1;i<=n;++i) scanf("%d",stu+i); bool flag = false; int i; for(i=1;i<=n;++i) if(stu[i]!=stu[1]) break; if(i>n) flag = true; while(!flag) { ans++; for(int i=1;i<=n;++i) { stu[i]/=2; } int tmp = stu[n]; for(int i=n;i>=2;--i) { stu[i] += stu[i-1]; if(stu[i]&1) stu[i] += 1; } stu[1] += tmp; if(stu[1]&1) stu[1] += 1; int i; for(i=1;i<=n;++i) if(stu[i]!=stu[1]) break; if(i>n) flag = true; } cout<<ans<<" "<<stu[1]<<endl; } return 0; }