题目
某个幼儿园里,有 55 位小朋友编号依次为 1,2,3,4,51,2,3,4,5 他们按照自己的编号顺序围坐在一张圆桌旁。他们身上有若干糖果,现在他们玩一个分糖果游戏。从 11 号小朋友开始,将自己的糖果均分成 33 份(如果有多余的糖果,就自己立即吃掉),自己留一份,其余两份分给和他相邻的两个小朋友。接着 2,3,4,52,3,4,5 号小朋友也这样做。问一轮结束后,每个小朋友手上分别有多少糖果。
输入格式
一行,55 个用空格隔开的 int
范围内的正整数,分别是游戏开始时 1,2,3,4,51,2,3,4,5 号小朋友手里糖果的数量。
输出格式
22 行,第 11 行是用一个空格隔开的 55 个整数,表示一轮游戏结束后 1,2,3,4,51,2,3,4,5 号小朋友手里糖果的数量。第 22 行是一个整数,表示一轮游戏过程中吃掉的糖果的总数。
下为逻辑错误代码
#include<stdio.h>
int main()
{
int a,b,c,d,e,sum;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
sum=a%3;
a=a/3;
b+=a/3;e=e+a/3;
sum=sum+b%3;
b=b/3;
c=c+b/3;a=a+b/3;
sum=sum+c%3;
c=c/3;
d=d+c/3;b=b+c/3;
sum=sum+d%3;
d=d/3;
e=e+d/3;c=c+d/3;
sum=sum+e%3;
e=e/3;
a=a+e/3;d=d+e/3;
printf("%d,%d,%d,%d,%d\n%d",a,b,c,d,e,sum);
return 0;
}
下为正确代码
#include<stdio.h>
int main()
{
long long a,b,c,d,e,sum;
scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e);
sum=a%3;
b+=a/3;e=e+a/3;a=a/3;
sum=sum+b%3;
c=c+b/3;a=a+b/3;b=b/3;
sum=sum+c%3;
d=d+c/3;b=b+c/3;c=c/3;
sum=sum+d%3;
e=e+d/3;c=c+d/3;d=d/3;
sum=sum+e%3;
a=a+e/3;d=d+e/3;e=e/3;
printf("%lld %lld %lld %lld %lld\n%lld",a,b,c,d,e,sum);
return 0;
}
对于相邻小朋友手中糖果的数量要先算,否则先算自己手中的糖果会导致计算完后先赋值为分完谈糖果后手中糖果的数量。随后计算相邻小朋友手中的糖果是采用的分完后的值再次分为3份在与自己手中的糖果相加。吃掉的和也要放在第一位.