用c语言编写分糖果问题!
10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。学的还比较少,希望大家回复的时候可以尽量易懂!
(结帖)
[此贴子已经被作者于2017-5-7 10:03编辑过]
程序代码:#include <stdio.h>
int main(void)
{
int Children[10] = { 12,2,8,22,16,4,10,6,14,20 };
int tmp[10];
for (int n=1;;n++)
{
for (int i = 0; i < 10; i++)
{
tmp[i] = Children[i] / 2; //把每人手中的糖减去一半,并存放到tmp数组待用
Children[i] = tmp[i];
}
for (int j = 0; j < 10; j++) //把糖分给右边的人
{
if (j == 0)
Children[j] += tmp[9];
else
Children[j] += tmp[j - 1];
}
for (int k = 0; k < 10; k++) //手上糖为单数的,+1成双数
if (Children[k] % 2 == 1)
Children[k] += 1;
for (int y = 0; y < 10; y++)
printf("%d ",Children[y]);
printf("\n");
for (int x = 0; x < 10; x++)
{
if (Children[0] != Children[x]) //对比每人手中糖果数,有不同则跳出循环从头继续
break;
if (x == 9) //经过10次对比相同,则输出并结束程序
{
printf("经过 %d 次调整后,大家的糖块一样多,且每人 %d 块。\n", n, Children[0]);
return 0;
}
}
}
return 0;
}
程序代码:#include <stdio.h>
#include <stdbool.h>
bool foo( unsigned a[10], unsigned b[10] )
{
bool bchanged = false;
for( size_t i=0; i!=10; ++i )
{
b[i] = (a[(i+9)%10]/2 + a[i]/2 + 1)/2*2;
bchanged = a[i]==b[i]?bchanged:true;
}
return bchanged;
}
int main( void )
{
unsigned buf[2][10] = { 12,2,8,22,16,4,10,6,14,20 };
unsigned count = 0;
for( ; foo(buf[count%2],buf[(count+1)%2]); ++count )
{
//printf( "count=%-3u ", count+1 );
//for( size_t i=0; i!=10; ++i )
// printf( "%3u%c", buf[(count+1)%2][i], " \n"[i+1==10] );
}
printf( "count=%u, number=%u\n", count, buf[0][0] );
return 0;
}