以下是引用风过无痕1989在2020-12-13 11:03:57的发言:
我在网上搜索到的题目是这样的:
十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。
然后所有的小孩同时将自己手中的糖分一半给左边的小孩;糖块数为奇数的人可向老师要一块.问经过这样几次调整后大家手中的糖的块数都一样? 每人各有多少块糖?
“左边的小孩”是啥,比如他的序号是index,左边的是index-1,还是index+1?
我当成index+1做
程序代码:
#include <stdio.h>
#include <stdbool.h>
bool foo( unsigned a[static 10] )
{
bool bequal = true;
unsigned t = (a[0]+a[9]+2)/4*2;
for( size_t i=9; i!=0; --i )
{
a[i] = (a[i]+a[i-1]+2)/4*2;
bequal = bequal && a[i]==t;
}
a[0] = t;
return bequal;
}
int main(void)
{
unsigned a[10] = {10,2,8,22,16,4,10,6,14,20};
for( size_t i=0; ; ++i )
{
bool bequal = foo(a);
printf( "第%zu次后结果是: ", i+1 );
for( size_t j=0; j!=10; ++j )
printf( "%u%c", a[j], " \n"[j+1==10] );
if( bequal )
break;
}
}
输出
第1次后结果是: 16 6 6 16 20 10 8 8 10 18
第2次后结果是: 18 12 6 12 18 16 10 8 10 14
第3次后结果是: 16 16 10 10 16 18 14 10 10 12
第4次后结果是: 14 16 14 10 14 18 16 12 10 12
第5次后结果是: 14 16 16 12 12 16 18 14 12 12
第6次后结果是: 14 16 16 14 12 14 18 16 14 12
第7次后结果是: 14 16 16 16 14 14 16 18 16 14
第8次后结果是: 14 16 16 16 16 14 16 18 18 16
第9次后结果是: 16 16 16 16 16 16 16 18 18 18
第10次后结果是: 18 16 16 16 16 16 16 18 18 18
第11次后结果是: 18 18 16 16 16 16 16 18 18 18
第12次后结果是: 18 18 18 16 16 16 16 18 18 18
第13次后结果是: 18 18 18 18 16 16 16 18 18 18
第14次后结果是: 18 18 18 18 18 16 16 18 18 18
第15次后结果是: 18 18 18 18 18 18 16 18 18 18
第16次后结果是: 18 18 18 18 18 18 18 18 18 18