C语言分糖果

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43530041/article/details/85113715