问题描述
某幼儿园按如下方法依次给A,B,C,D,E五个小孩发糖果。将全部糖果的一半再加二分之一块糖果发给第一个小孩;将剩下糖果的三分之一再加三分之一块糖果发给第二个小孩;将剩下糖果的四分之一再加四分之一块糖果发给第三个小孩;将剩下糖果的五分之一再加五分之一块糖果发给第四个小孩;将最后剩下的11块糖果发给第五个小孩。每个小孩得到的糖果数均为整数。试确定原来共有多少块糖果?每个小孩各得到多少块糖果?
分析
源程序
C语言
#include<stdio.h>
int main()
{
int n,flag,x,k,a,b,c,d,e;
n = 11;
flag = 1;
printf("Start");
while(flag)
{
x = n;
flag = 0;
for(k=1;(k<=4)&&(flag==0);k++)
{
if((n+1)%(k+1)==0)
{
n=n-(n+1)/(k+1);
printf("n = %d\n",n);
}
else
flag = 1;
}
if(flag==0&&n!=11)
flag = 1;
n = x + 1;
}
printf("Total number of candy=%d\n",x);
a = (x+1)/2;
b = (x-a+1)/3;
c = (x-a-b+1)/4;
d = (x-a-b-c+1)/5;
e = 11;
printf("A=%d\n",a);
printf("B=%d\n",b);
printf("C=%d\n",c);
printf("D=%d\n",d);
printf("E=%d\n",e);
printf("END");
return 0;
}
/*
Start
Total number of candy=59
A=30
B=10
C=5
D=3
E=11
END
*/
#include<stdio.h>
int main()
{
float x1,x2=11;
int a[6];
char c='a';
int i;
for(i=5;i>=2;i--) //用于求出最初的糖果数x1
{
x1=(x2+1.0/i)/(1-1.0/i);
x2=x1;
}
printf("sum=%d\n",(int)x1);//总数
for(i=2;i<=5;i++)
{
x2=(x1+1.0)/i;
printf("x%c=%d\n",c,(int)x2);
x1=x1-x2;
c++;//改变角标
}
printf("xe=11\n");
return 0;
}
/*
sum=59
xa=30
xb=10
xc=5
xd=3
xe=11
*/
python
#coding:gbk
flag = 1
x = 11
while flag:
flag = 0
n = x
for i in range(2,6):#依次对前四个小孩糖果数判断
if int((n+1)%i) == 0: #判断分得的数量是否为整数
n = n - (n+1)//i
else:
flag = 1
if (flag == 0 and n != 11):#当前述数字为整数时,进一步判断最后一个小孩的数量是否为11
flag = 1
x = x + 1
print("总数为",x-1)
'''
总数为 59
'''