天使队的口号:C语言问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 23:49:43
幼儿园按如下方法依次给A,B,C,D,E五个小孩发糖果。将全部糖果的一半再加二分之一块糖果发给第一个小孩;将剩下糖果的三分之一再加三分之一块糖果发给第二个小孩;将剩下糖果的四分之一再加四分之一块糖果发给第三个小孩;将剩下糖果的五分之一再加五分之一块糖果发给第四个小孩;将最后剩下的11块糖果发给第五个小孩。每个小孩得到的糖果数均为整数。试确定原来共有多少块糖果?每个小孩各得到多少块糖果?
要求结果的输出格式为
sum=糖果总数
xa=A得到的糖果数
xb=B得到的糖果数
xc=C得到的糖果数
xd=D得到的糖果数
xe=E得到的糖果数

#include "stdio.h"
main()
{ FILE *fp;
int sum,xa,xb,xc,xd,xe;

if((fp=fopen("58114_2.dat","w"))==NULL) /* 创建结果文件 */
{ printf("cannot open this file.\n");
exit(0);
}

sum=0;
while(1)
{ if(60*sum-((sum+1)*30+(sum+1)*10+(sum+1)*5+(sum+1)*3)==660) break; /* 这用了穷举法,利用了总数减前四人等于第五人的等价关系,等式两边同乘了60 */
sum=sum++;
}
xa=(sum+1)/2; /* 以下是求各自所得糖数 */
xb=((sum-xa)+1)/3;
xc=((sum-xa-xb)+1)/4;
xd=((sum-xa-xb-xc)+1)/5;
xe=sum-xa-xb-xc-xd;

fprintf(fp,"sum=%d\nxa=%d\nxb=%d\nxc=%d\nxd=%d\nxe=%d",sum,xa,xb,xc,xd,xe); /* 结果写进文件 */
fclose(fp);
}

1
{ if(60*sum-((sum+1)*30+(sum+1)*10+(sum+1)*5+(sum+1)*3)==660) break; /* 这用了穷举法,利用了总数减前四人等于第五人的等价关系,等式两边同乘了60 */
这一条是什么意思((sum+1)*30+(sum+1)*10+(sum+1)*5+(sum+1)*3)

xa=(sum+1)/2-----------------------(1)
xb=((sum-xa)+1)/3------------------(2)
xc=((sum-xa-xb)+1)/4---------------(3)
xd=((sum-xa-xb-xc)+1)/5------------(4)
xe=sum-xa-xb-xc-xd-----------------(5)
xe=11------------------------------(6)

这6行是此题的方程式,你整合一下会得到这
60*sum-((sum+1)*30+(sum+1)*10+(sum+1)*5+(sum+1)*3)=660