這不是嚴格意義上的編碼問題,因爲我負責電子表格而不是代碼,但應用了相同的原則。避免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