案例:幼儿园老师将糖果分成若干等份(敲黑板:等份),让小朋友任意次数领取,第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;
}
运行结果: