关于洛谷B2020 分糖果问题的做法以及思考

题目原型:

某个幼儿园里,有 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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值