严格来说,这不是编码问题,因为我负责电子表格而不是代码,但适用相同的原则。
我正在尝试创建一个“平均预测器”的电子表格。举个例子:比如说一个击球手从40局平均得到24分(换句话说,得分为960分)。如果他从这里开始平均每场比赛平均40次,那么他将职业生涯平均值提高到30分需要多少局?
手动处理这个例子非常容易,并且使用while循环解决一般问题也很容易。但是,如上所述,我不能使用循环。有什么想法或建议吗?
答案 0 :(得分:2)
为此目的,您不需要循环。您可以使用以下公式(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
答案 1 :(得分:0)
正如@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