一本通 例2.17 分糖果
这个题目的大意是:有5个编号为1、2、3、4、5的小朋友,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果,现在从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友(以1号为基准的话,就分给2号和5号)。接着2号,3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果?

这个题目的难点在于将这五个小朋友抽象成一个圆,圆上有五个点:

只要将这个图能自己抽象出来,就可以了。

代码如下:

#include<cstdio>
#include<iostream>
using namespace std;
int a[7];
int main()
{
for(int i=1;i<=5;i++) //输入
cin>>a[i];
for(int i=1;i<=5;i++) //分糖果
{
if(i==1)
{
a[5]+=a[i]/3;
a[i+1]+=a[i]/3;
a[i]=a[i]/3;
}
else if(i==5)
{
a[1]+=a[i]/3;
a[i-1]+=a[i]/3;
a[i]=a[i]/3;
}
else
{
a[i-1]+=a[i]/3;
a[i+1]+=a[i]/3;
a[i]=a[i]/3;
}
}
for(int i=1;i<=5;i++)
printf("%5d",a[i]);
return 0;
}