HDU-1034,Candy Sharing Game

简介: HDU-1034,Candy Sharing Game

Problem Description:


A number of students sit in a circle facing their teacher in the center. Each student initially has an even number of pieces of candy. When the teacher blows a whistle, each student simultaneously gives half of his or her candy to the neighbor on the right. Any student, who ends up with an odd number of pieces of candy, is given another piece by the teacher. The game ends when all students have the same number of pieces of candy.

Write a program which determines the number of times the teacher blows the whistle and the final number of pieces of candy for each student from the amount of candy each child starts with.


Input:


The input may describe more than one game. For each game, the input begins with the number N of students, followed by N (even) candy counts for the children counter-clockwise around the circle. The input ends with a student count of 0. Each input number is on a line by itself.


Output:


For each game, output the number of rounds of the game followed by the amount of candy each child ends up with, both on one line.


Sample Input:


6


36


2


2


2


2


2


11


22


20


18


16


14


12


10


8


6


4


2


4


2


4


6


8


0


Sample Output:


15 14


17 22


4 8


解题思路:


就是按照逆时针去模拟给糖果的过程,注意先把自己的糖果给别人,再从别人那里获得,主要边界处理,就是a[0]和a[n-1]的关系就可以了,简单的模拟题。。。


程序代码:


#include<stdio.h>
#define N 1001
int a[N];
int main()
{
  int n,i,ans,t;
  while(scanf("%d",&n),n)
  {
    for(i=0;i<n;i++)
      scanf("%d",&a[i]);
    ans=0;
    while(1)
    {
      for(i=1;i<n;i++)
        if(a[i-1]!=a[i])
          break;
      if(i>=n)
        break;
      ans++;
      t=a[n-1]/2;
      for(i=n-1;i>0;i--)
      {
        a[i]/=2;
        a[i]+=a[i-1]/2;
      }
      a[0]/=2;
      a[0]+=t;
      for(i=0;i<n;i++)
        if(a[i]&1)
          a[i]++;
    }
    printf("%d %d\n",ans,a[0]);
  }
  return 0;
}


相关文章
|
存储 算法
LeetCode 289. Game of Life
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
49 0
LeetCode 289. Game of Life
|
算法 索引
LeetCode 45. Jump Game II
给定一个非负整数数组,初始位置在索引为0的位置,数组中的每个元素表示该位置的能够跳转的最大部署。目标是以最小跳跃次数到达最后一个位置(索引)。
50 0
LeetCode 45. Jump Game II
|
算法 索引
LeetCode 55. Jump Game
给定一个非负整数数组,您最初定位在数组的第一个索引处。 数组中的每个元素表示该位置的最大跳转长度。 确定您是否能够到达最后一个索引。
72 0
LeetCode 55. Jump Game
|
人工智能 算法 大数据
|
Java
HDU 5882 Balanced Game
Balanced Game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 508    Accepted Submission(s): ...
816 0
LeetCode - 45. Jump Game II
45. Jump Game II  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数组a,玩家的初始位置在idx=0,玩家需要到达的位置是idx=a.
919 0
[LeetCode] Game of Life
A solution using additional spaces to solve a copy of the original board is easy. To get an in-place solution, we need to record the information of state transitions directly in the board.
703 0