Advertisement

hdu 1034 #模拟

阅读量:

在每一次游戏循环中,在一个围成圆圈的学生群体里进行操作:每个参与者将自己的全部糖果的一半转移给右侧的同学;如果某个学生的最终糖果数量为奇数,则他将向老师领取一块以确保总数为偶数。

探讨多少轮次的游戏能完成(每位参与者在游戏终止时拥有相同的糖果数量,则可推断该过程必将在有限步骤内完成)

复制代码
 #include <stdio.h>

    
  
    
 #define N 100
    
 int main()
    
 {
    
     int s[N],n,i,j,k,t,p;
    
     while(scanf("%d",&n) == 1 && n)
    
     {
    
     for(i = 0; i < n; ++i)
    
         scanf("%d",s + i);
    
     for(k = 1; ; ++k)
    
     {
    
         t = s[n-1]/2;
    
         for(i = 0; i < n;++i)
    
         {
    
             p = s[i] / 2;
    
             s[i] = s[i] / 2 + t;
    
             t = p;
    
             if(s[i]&1)
    
                 ++s[i];
    
         }
    
         t = s[0];
    
         for(i = 1; i < n && t == s[i]; ++i);
    
         if(i == n)
    
             break;
    
     }
    
     printf("%d %d\n",k,t);
    
     }
    
     return 0;
    
 }
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~