10个小孩围成一圈分糖果。老师首先给每个小孩若干块糖果(每个小孩得到的糖果块数都不相等),然后命令所有的小孩同时将自己手中的糖果分一半给右边的小孩(第二个小孩给第一个小孩,以此类推,第十个小孩给第九个小孩,第一个小孩给第十个小孩);糖果块数为奇数的人可向老师要一块。问经过这样几次调整后大家手中的糖果的块数都一样?最后每人各有多少块糖果?
提示:
输入:老师分给10个小孩的初始糖果块数(整数)
输出:分两行。第一行是调整的次数,第二行是最后每人拥有的糖果块数。
例如:
input:
10 2 8 22 16 4 10 6 14 20
output:
17
18
#include <stdio.h>
int judge(int a[10])
{
int i, j;
for (i = 1; i < 10; i++)
for (j = 0; j < i; j++)
if (a[i] != a[j])
return 1;
return 0;
}
void delivery(int a[10])
{
int i, t = 0;
for (i = 0; i < 10; i++)
a[i] /= 2;
t = a[0];
for (i = 0; i < 9; i++)
a[i] += a[i + 1];
a[9] += t;
}
void even(int a[10])
{
int i;
for (i = 0; i < 10; i++)
if (a[i] % 2)
a[i]++;
}
int main()
{
int a[10] = { 0 };
int i, cnt = 0;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
while (judge(a)) {
even(a);
delivery(a);
cnt++;
}
printf("%d\n%d", cnt,a[0]);
return 0;
}