这不是严格意义上的编码问题,因为我负责电子表格而不是代码,但应用了相同的原则。避免while循环
我试图创建一个“平均预测器”的电子表格。举个例子:说一个击球手从40局平均得到24分(换句话说,已经得到960分)。如果他从现在起每场比赛平均执行40次,那么他需要多少局才能将自己的职业生涯平均提高到30?
用手工处理这个例子非常容易,并且就像用while循环解决一般问题一样简单。但是,如前所述,我不能使用循环。任何想法或建议?
这不是严格意义上的编码问题,因为我负责电子表格而不是代码,但应用了相同的原则。避免while循环
我试图创建一个“平均预测器”的电子表格。举个例子:说一个击球手从40局平均得到24分(换句话说,已经得到960分)。如果他从现在起每场比赛平均执行40次,那么他需要多少局才能将自己的职业生涯平均提高到30?
用手工处理这个例子非常容易,并且就像用while循环解决一般问题一样简单。但是,如前所述,我不能使用循环。任何想法或建议?
您不需要为此目的的循环。你可以用下面的公式(moving average)解决它:
(current_avg * current_innings + avg * x)/(current_innings + x) = goal_avg
你必须解决方程x
。
您例如在Wolfram Alpha的计算:
输入:(24 * 40 + 40 * x)/(40 + x) = 30 solve x
结果:x=24
正如有关问题的意见建议@StriplingWarrior,写出来的一般方程,解它以代数形式表示,并在电子表格中使用生成的公式。原始方程由@trylimits在前面的答案中给出。我使用略有不同的标识衬托出了问题的对称性:
(old_avg * old_innings + new_avg * new_innings)/(old_innings + new_innings)
= goal_avg
old_avg * old_innings + new_avg * new_innings
= goal_avg * (old_innings + new_innings)
old_avg * old_innings + new_avg * new_innings
= goal_avg * old_innings + goal_avg * new_innings
new_avg * new_innings - goal_avg * new_innings
= goal_avg * old_innings - old_avg * old_innings
new_innings * (new_avg - goal_avg) = old_innings * (goal_avg - old_avg)
如果new_avg - goal_avg
为零,有没有办法解决,除非goal_avg - old_avg
也为零,在这种情况下,无需改变和new_innings
可以为零。如果new_avg - goal_avg
非零:
new_innings = old_innings * (goal_avg - old_avg)/(new_avg - goal_avg)
这个等式的右手边是你可以把在电子表格中的公式。
从该示例中的值是:
old_avg = 24
old_innings = 40
new_avg = 40
goal_avg = 30
new_innings = 40 * (30 - 24)/(40 - 30)
= 240/10
= 24
使用代数开发一种通式,然后写对应于式代码。 – StriplingWarrior 2014-12-05 00:01:21
这个问题似乎是题外话题,因为它是关于解决数学问题 – AakashM 2014-12-05 10:52:35