阅读下列程序说明和C代码,填入(n)处。 【说明】 幼儿园有n(<20)个孩子围成一圈分糖果。老师先随机地发给每个孩子若干颗糖果, 然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友。如共有8个孩子,则第1个

admin2009-05-15  41

问题 阅读下列程序说明和C代码,填入(n)处。
    【说明】
   幼儿园有n(<20)个孩子围成一圈分糖果。老师先随机地发给每个孩子若干颗糖果,
   然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友。如共有8个孩子,则第1个将原有的一半分给第2个,第2个将原有的一半分给第3个,……,第8个将原有的一半分给第1个,这样的平分动作同时进行。若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果数变成偶数。小孩人数和每个小孩的初始糖果数由键盘输入。下面的程序可求出经过多少次上述这样的调整,使每个孩子手中的糖果—样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
   【程序】
   #include <stdio.h>
   #define N 20
   int allEqual (int a[  ],int n) /*检查每个孩子手中的糖果是否一样多*/
   {   iht i;
       for(i=1; i<n; i++)
           if(a[O]!=a) return O;
       return 1;
}
   int a[N], b[N];
   void main (  )
   {  int i, n, addk, loopc;
   printf("Enter n((20)\n"); scanf("%d", &n);
   printf ("Enter data\n");
   for( i=O; i(n; i++) scanf("%d", &a);
   addk=O;(1);
   while (2){ /*平分循环*/
   loopc++;
   for ( i=O; i ( n; i++){ /*为一次调整作准备*/
       if(a%2) { a++;(3); }
       if (i<n-1) b[i+1]=a/2; else(4)
       a/=2;
       }
   for(i=O; i<n; i++)(5); /*完成一次调整*/
      }
   printf("调整%d次\n", loopc); printf("每个孩子有%d颗糖果\n", a[0]);
   printf("调整过程中新增发%d颗糖果。\n", addk); }

选项

答案(1)loopc=0 //loopc设置初值为0 (2)! a11Equal(a, n) 或者 a11Equal (a, n)==0 //判断奈件a11Equal (a, n)是否为假 (3)addk++或者addk=addk+1 //addk的值增加1 (4)b[0]=a[i]/2 //如果条件不满足,b[0]的值是a[i]/2 (5)a[i]+=b[i]或者a[i]=a[i]+b[i] //a[i]增加b[i]

解析
转载请注明原文地址:https://kaotiyun.com/show/I1JZ777K
0

最新回复(0)