小习题:巧分苹果

一.题目概要:

一家农户以果园为生,一天,父亲推出一车苹果, 共2520个,准备分给他的6个儿子。父亲按事先写在一张纸上的数字把这堆苹果分完,每个人分到的苹果个数都不相同。他说:“老大,把你分到的苹果的1/8给老二,老二拿到后,连同原来的苹果分1/7给老三,老三拿到后,连同原来的苹果的1/6给老四,依此类推,最后老六拿到后,连同原来的苹果分1/3 给老大,这样,你们每个人分到的苹果就一样多了。” 问兄弟6人原先各分到多少只苹果?运行结果如图4.8所示。

二.算法分析: 

(1)由题可知父亲用完这中方法后,各兄弟的苹果数已是平均数。故我们可通过这个平均数来反推过去,求出原本各兄弟的苹果数。设置一个变量为s=2520/6。

(2)我们得知道每人的原先苹果数与得到哥哥的苹果但还没分给弟弟时的苹果数。为什么呢?这两个数与s之间有联系,而且原先苹果数是我们所求的数字。所以我们可以分别设置两个数组来存这两个数(分别为x[ i ]与y[ i ])。其中,我们得知道这些兄弟里有一位是特殊的,那就是老大,他的x[ i ]与y[ i ]是相等的。

(3)由题可知,老二将他得到哥哥分的苹果后的总数的1/7分给老三后,他的苹果数便为平均数,所以可知y[ i ]*6/7=s;老三将他得到哥哥分的苹果后的总数的1/6分给老四后便为平均数,所以y[ i ]*5/6=s.......依此类推,可知从老二后,有一个规律,那就是y[ i ]=s*(8-i)/(7-i)(i>=1)。所以我们可以通过一个for循环语句来求出除老大外其他兄弟的y[ i ]。

(4)通过第三步后,我们也可以求出老大的y[ i ]。老大是先将自己的1/8苹果分给老二以及收到老六的1/6苹果后才为平均数,所以y[0]*7/8+y[5]*1/3=s。

(5)算出y[ i ]后,我们可以算出x[ i ]。他们之间有一个关系,就是y[ i ]等于x[ i ]加上从哥哥那得到的苹果。此处拿老二为例,y[1]=x[1]+y[1]*1/8。所以可得出一个公式x[i]=y[i]-y[i-1]/(9-i)。

(6)最后再利用一个for循坏语句将他们分别打印出。

三.程序代码:

#include<stdio.h>

int main()
{
	//用来存储兄弟原本得到的苹果数
	int x[6]={0,};
	//用来存储从哥哥分到的苹果且还没分给弟弟时的苹果数(老大特例)
	int y[6]={0,};
	//s用来存储采用父亲的方法之后,各兄弟所得的平均苹果数
	int s,i;
	s=2520/6;

	//除老大外,其他兄弟从比自己大的兄弟那得到的苹果数
	for(i=1;i<6;i++) 
	{
		y[i]=s*(8-i)/(7-i);
	}
	
	y[0]=x[0]=(s-y[5]/3)*8/7;//老大的苹果数
	
	//除老大外原先苹果数
	for(i=1;i<6;i++)
	{
		x[i]=y[i]-y[i-1]/(9-i);
	}

	//输出每人的苹果数
	for(i=0;i<6;i++)
	{
		printf("老%d原先的苹果数为%d\n",i+1,x[i]);
	}

	return 0;
}

四.结果:

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序番茄君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值