输入N(几个孩子),N个数值(表示每个小孩本来已经有的糖数),
每一个孩子每轮都要给右边的孩子自己原来的一半的糖(先给后得),
当孩子的手中的糖的数量出现奇数的时候,老师给他添加一块
求要几轮才能出现每个孩子手中的糖数量一样多?
1 /* 2 测试数据: 3 6 4 5 8 1 6 7 4 5 */ 6 #include <stdio.h> 7 #include <stdlib.h> 8 9 int Arr_student[ 100]; 10 11 int divide( int N, int Arr_student[]) 12 { 13 int temp; 14 15 if(Arr_student[N]% 2 != 0) 16 { 17 Arr_student[N]+= 1; 18 } 19 20 if(N!= 0) 21 { 22 temp=Arr_student[N]/ 2; 23 Arr_student[N]=divide(N- 1,Arr_student)+temp; 24 return temp; 25 } 26 else 27 { 28 Arr_student[ 0]/= 2; 29 return Arr_student[ 0]; 30 } 31 32 } 33 34 int check( int temp, int Arr_student[]) 35 { 36 while(temp!= 0) 37 { 38 if(Arr_student[temp]!=Arr_student[--temp]) 39 return 0; 40 } 41 42 return 1; 43 } 44 45 void print( int N_student) 46 { 47 int i; 48 for(i= 0;i<N_student;i++) 49 { 50 printf( " %d ",Arr_student[i]); 51 } 52 printf( " \n "); 53 } 54 55 int main() 56 { 57 int N_student,i,tmp,count= 0; 58 59 scanf( " %d ",&N_student); 60 61 for(i= 0;i<N_student;i++) 62 scanf( " %d ",&Arr_student[i]); 63 64 while(check(N_student- 1,Arr_student)!= 1) 65 { 66 tmp = divide(N_student- 1,Arr_student); 67 // printf("%d\n",tmp); 68 // 学生0要加上从最后的那位学生得来的糖果 69 Arr_student[ 0]+=tmp; 70 print(N_student); 71 count++; 72 } 73 74 printf( " %d\n ",count); 75 // printf("½á¹û£º\n"); 76 // for(i=0;i<N_student;i++) 77 // printf("%d ",Arr_student[i]); 78 79 return 0;
80 }
结果: