刚学完数组,现在就好好用一下吧。
父亲推出一车苹果,共2520个,准备分给他的6个儿子。父亲按事先写在一张纸上的数字把这堆苹果分完,每个人分到的苹果个数都不相同。他说:“老大,把你分到的苹果的1/8给老二,老二拿到后,连同原来的苹果分1/7给老三,老三拿到后,联通原来的苹果的1/6给老四,以此类推,最后老六拿到后连同原来的苹果分1/3给老大,这样,你i没每个人分到的苹果就一样多了。”问兄弟6人原先各分到多少只苹果?
首先我们把各个兄弟每人原本拿到的苹果数目计作x[6],把他们得到别人的苹果后为分出去时的数目记作y[6](除了老大,老大是例外)(换句话说,y[i]的含义是指分出去苹果的时要乘以分数的那个的苹果数,也就是计算分出去苹果数目时乘以分数的那个整数),将平均数记作s.
s=2520/6;
我们先得出y[i]=s*(8-i)/(7-i):
从老二开始看,老二得到老大分的苹果后,没在分出去前有y[i]个苹果,老二分出他的1/7后,就有了s个,也就是平均数个;因此可以写出式子s=y[i]*1/(8-i);因为我们要找的是y[i]的值,所以变换一下,就得到y[i]=s*(8-i)/(7-i)了。
由于上一步我们找了老二到老六的y[i]值,缺少了老大的值,因此,我们要单独写一段代码,算y[0]=x[0]=(s-y[5]*1/3)*8/7:
我们发现,老大在分出苹果时,还未得到老六的苹果,因此,可以得到y[i]=x[i];我们在这里要用到y[5]来计算,由于老大分出苹果后,还剩余y[0]*7/8的数量,再得到老六的y[5]*1/3的数量,现在就有了s个了,写出式子:s=y[0]*7/8+y[5]*1/3;我们的目标是y[0],变换一下就是y[0]=(s-y[5]*1/3)*8/7了.
接下来就是求x[i]了:
按题目顺序分析我们可以得到y[i]=x[i]+y[i-1]*1/(9-i);由于目标为x[i],变换一下就是x[i]=y[i]-y[i-1]*1/(9-i)。
最后后最,我们输出x[i],就是我们想要的答案啦
#include<stdio.h>
int main()
{
int s,i,n;
int x[6]={0};
int y[6]={0};
scanf("%d",&n);
s=n/6;
for(i=1;i<6;i++)
{
y[i]=s*(8-i)/(7-i);
}
y[0]=x[0]=(s-y[5]*1/3)*8/7;
for(i=1;i<6;i++)
{
x[i]=y[i]-y[i-1]*1/(9-i);
}
for(i=0;i<6;i++)
{
printf("%d\n",x[i]);
}
return 0;
}