Candy Sharing Game(hdoj1034)

6905 단어 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

36





십일
22
이십
십팔
십육
십사
십이










0
 
 
Sample Output
십오
십사
십칠
22


눈은 사탕을 나누는 게임이다. n명의 학생들이 한 바퀴를 돌고 모든 사람의 손에 a[i]개의 사탕이 있다. 매 게임이 시작될 때마다 학생들의 손에 있는 사탕은 짝수이다. 그들은 모두 자신의 손에 있는 사탕의 절반을 그의 오른쪽 학우에게 나누어 주었다.분배가 끝난 후 손에 들고 있는 사탕 수는 홀수이므로 선생님은 그에게 사탕 한 알을 주실 것이다.모든 사람이 손에 들고 있는 사탕 수가 똑같으면 게임이 끝난다.
수출이 총 몇 라운드를 진행했는지, 그리고 마지막 학생이 손에 들고 있는 사탕 수.
 
 1 #include <iostream>
 2 using namespace std;
 3 int f(int a[],int n)     // 
 4 {
 5     int i;
 6     for(i=0;i<n-1;i++)
 7         if(a[i]!=a[i+1])
 8             return 1;
 9     return 0;
10 }
11 int main()
12 {
13     int n;
14     
15     while(cin>>n&&n)
16     {
17         int a[500],i,x=0,y;
18         for(i=0;i<n;i++)
19             cin>>a[i];
20         while(f(a,n))
21         {
22             x++;
23             y=a[n-1]/2;
24             for(i=n-1;i>0;i--)
25             {            
26                 a[i]=a[i]/2+a[i-1]/2;
27                 if(a[i]%2)
28                     a[i]++;
29             }
30             a[0]=a[0]/2+y;
31             if(a[0]%2)
32                 a[0]++;
33         }
34         cout<<x<<" "<<a[0]<<endl;
35     }
36 }

좋은 웹페이지 즐겨찾기