所有學生以圓形圍著老師,每個學生開始時均有偶數塊糖果,老師每吹一次哨子,每位學生拿出手中一半糖果給右側的同學,對任何一個學生,吹哨後,當手中的糖果數為奇數塊時,由老師補一塊給他(她),這樣下去,當每個學生手中的糖果數相同時,遊戲結束.
輸入要求:遊戲測試不止一個,對於每個遊戲測試,輸入學生人數N,開始時每個學生手中的糖果數分別為多少(EVEN),輸入學生人數為"0"時,測試結束.
輸出要求:對每個遊戲測試,輸出老師吹了幾次哨後,學生手中的糖果數相同,並且在同一行輸出學生手中相同的糖果數是多少.
標準輸入:6
36
2
2
2
2
2
4
2
4
6
8
標準輸出:15 14
4 8
所解輸出和執行個體輸出有所不同,主要是老師吹哨次數的不同:
#include <iostream>
using namespace std ;
void arun(int *a, int nlen, int *n, int * how)
{
int j , t1, t2;
int i = 0;
while(1)
{
i++;
t2 = a[nlen -1] /2 ;
for ( j = 0 ; j < nlen ; j ++)
{
t1 = a[j] /2 ;
a[j] = t1 + t2;
t2 = t1;
}
for (j = 1; j < nlen ; j ++)
{
if(a[0] != a[j] )
break;
}
if(j == nlen) {
*n = i;
*how = a[0];
return ;
}
for(j = 0 ; j < nlen ; j ++)
{
if(a[j] % 2 == 1) a[j] ++;
}
}
}
int main()
{
int n,how;
while(1)
{
if(cin >> n )
{
if(n <= 0) break;
int * a = (int *) new int[n];
for(int i = 0 ; i < n ; i ++)
{
cin >> a[i] ;
}
arun(a,n,&n, &how);
delete [] a;
cout << n <<" " << how <<endl;
}
else break;
}
return 0;
}