C语言求助:十个小孩围成一圈分糖果问题
问题解答:
<pre t="code" l="cpp">#include<stdio.h>int;fx(int;a[10]){int;b[10];int;i,j,count=0;do{count++;for(i=0;i<10;i++);;;;//奇数补充动作应该在分糖之前;;;;if(a[i]%2);a[i]+=1;for(i=0;i<10;i++){b[i]=a[i]/2;a[i]=b[i];}a[0]=b[9]+a[0];for(i=1;i<10;i++);;;;//a[1]~a[9]的合并动作要补上;;;;a[i]+=;b[i-1];for(i=0;i<9;i++);;;;if(a[i]!=a[i+1]);break;;j=i;}while(j!=9);return(count);}void;main(){int;a[10]={10,2,8,22,16,4,10,6,14,20};int;cnt;=;fx(a);;;;;//用一个局部变量保存fx的返回结果printf("需要这样做%d次,每个人手中的糖块数量才相等,数量为%d块。",cnt,a[0]);;;;;//因为参数处理是从右往左,所以原来的代码在引用a[0]的值时,fx函数还未被调用,所以要在printf之前先调用fx}</pre>
#include<stdio.h>int fx(int a[10]){ int b[10]; int i,j,count=0; do { count++; //先看是否是奇数 for(i=0;i<10;i++) { if(a[i]%2) { a[i]+=1; } } for(i=0;i<10;i++) { b[i]=a[i]/2; a[i]=b[i]; } a[0]=b[9]+a[0];//你没有移动糖给边上的小朋友,用下面的代码加上 for (i = 1; i < 10; ++i) { a[i] += b[i - 1]; } for(i=0;i<9;i++) { if(a[i] != a[i+1]) { break; } } j = i; }while(j!=9); return(count);}void main(){ int a[10]={10,2,8,22,16,4,10,6,14,20}; int n = fx(a);//如果函数不遇到“;”号是不会结束的,所以要先算出结果,不然a[0]还是以前的值 printf("需要这样做%d次,每个人手中的糖块数量才相等,数量为%d块。",n,a[0]);}