题目原型:
某个幼儿园里,有 55 位小朋友编号依次为 1,2,3,4,51,2,3,4,5 他们按照自己的编号顺序围坐在一张圆桌旁。他们身上有若干糖果,现在他们玩一个分糖果游戏。从 11 号小朋友开始,将自己的糖果均分成 33 份(如果有多余的糖果,就自己立即吃掉),自己留一份,其余两份分给和他相邻的两个小朋友。接着 2,3,4,52,3,4,5 号小朋友也这样做。问一轮结束后,每个小朋友手上分别有多少糖果。
做法:
可能某些朋友在刚刚拿到这个题时,会和我一样,认为它应该是五个人一起将糖果平均分成三份,在相互向相邻的人分配糖果,导致大家得不到想要的结果。事实也确实如此。
那什么才是这个体的正确思路呢?
在C语言中顺序是非常重要的,所以呢,有没有一种可能是第一个人将自己的糖果均分成三份并将多余的吃掉后,又将那均分的三份给他相邻的两人,而下一个人在均分他的糖果时,他糖果的数量是他自己原来有的加上前一个人分给他的呢?而这,正是与我们平常思维不一样的地方。
思考:
在C语言的学习过程中,多少会有一些让你想不明白的问题,此时,你也许可以换一种思考方式,想想你这样做是在干什么,仅仅是为了做一个题吗?
以下是一个C程序代码,希望可以帮助到你
#include<stdio.h>
#define N 5
int main()
{
int a[N];
int b,c,d,e,f;
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
b=a[0]%3;
a[1]+=a[0]/3;
a[4]+=a[0]/3;
c=a[1]%3;
a[0]=a[0]/3+a[1]/3;
a[2]+=a[1]/3;
d=a[2]%3;
a[1]=a[1]/3+a[2]/3;
a[3]+=a[2]/3;
e=a[3]%3;
a[2]=a[2]/3+a[3]/3;
a[4]+=a[3]/3;
f=a[4]%3;
a[3]=a[3]/3+a[4]/3;
a[0]+=a[4]/3;
a[4]=a[4]/3;
for(int i=0;i<N;i++)
{
printf("%d ",a[i]);
}
printf("\n");printf("%d",b+c+d+e+f);
}