老师分糖果问题

案例:幼儿园老师将糖果分成若干等份(敲黑板:等份),让小朋友任意次数领取,第1个领取的,得到一份加剩余糖果的1/10;第2个领取的,得到2分加剩余糖果的1/10;第3个领取的,得到3份加剩余糖果的1/10,.........以此类推。问有多少名小朋友?老师将糖果分成了多少份?

数学角度思考:

        假设老师一共分了n份糖果,则第一名小朋友得到的糖果份数为:sum1=(n-1)/10+1=(n+9)/10.

第二名小朋友得到的糖果份数为:sum2=(n-(n+9)/10-2)/10+2=(9n+171)/100.

这里我们使用穷举法,因为第一个小朋友拿的分数要为整数份,所有水果的份数最少为11,后面我们只有看前俩名小朋友得到的糖果份数结果是否相等,如果不相等,则n加1.返回到前面的运算,直到前俩名小朋友的糖果数相等为止。

#include<iostream>
using namespace std;
int main()
{
	double sum1=0;		//第一名小朋友得到的糖果份数
	double sum2=0;		//第二名小朋友得到的糖果份数
	int n=11;
	int num;			//小朋友的人数
	while (n)
	{
		sum1 = (n + 9) / 10.0;	//10后必须加小数点,否则右侧数做的是整数相除法
		sum2 = (9 * n + 171) / 100.0;	//100后必须加小数点,原因同上
		n++;
		if (sum1 != (int)sum1)		//防止sum1为小数结果
		{
			continue;
		}
		if (sum2 != (int)sum2)		// 防止sum2为小数结果
		{
			continue;
		}
		if (sum1 == sum2)			//当前俩名小朋友分得糖果一致,结束循环
		{
			n--;					//将前面n加多了一次1冲减掉
			break;
		}
	}
	num = n / sum1;					
	cout << "水果糖一共分了" << n << "份给:"<< num<<"名小朋友" << endl;
	system("pause");
	return 0;
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值