2013-02-17 18 views
0

在我的代碼,我有總100即項目組的還有各組和各組總人數中的項目總數是100個按比例減少了一組數字來平衡總

現在,如果用戶決定更改其中一個計數,我希望所有其他人都按比例縮放,因爲他們仍然處於相同的比例,但總數仍然爲100.

即如果我們開始

[20, 30, 50] 

而您將50更改爲75 那麼你最終會與

[10, 15, 75] 

所以我需要的是一個函數,它接受指數和新價值 的爭論和調整數組中的值,以平衡它們。

僞代碼將是驚人的! Java更是如此!

+1

你打算如何處理舍入? [11,19,70] - > [?,?,75] – 2013-02-17 03:23:44

+0

它不需要是完美的,所以我的目標是將它們全部放到最近的整數中,然後從最大的數中加/減 – Hector 2013-02-17 03:28:36

回答

0

您可以簡單地添加非用戶更改號碼的數量,將它們的比率設置爲該數字,並確保在您嘗試增加或減少數字時定額不變。

例如

  • 說:A + B + C + d = 100
  • 說用戶添加deltaA到,

然後

int newB = (int) (b * ((double)b + c + d - deltaA)/(b + c + d)) 

和同爲他人:

int newC = (int) (c * ((double)b + c + d - deltaA)/(b + c + d)) 
int newD = (int) (d * ((double)b + c + d - deltaA)/(b + c + d)) 

請注意,這有沒有什麼與Java有關,並且與編程無關,而只不過是最基本的代數而已。另請注意,由於四捨五入的挑戰,此解決方案可能超過或低於100乘以1或2。你必須對此做一點冒險。

+0

我認爲這正是我所做的,但它似乎沒有工作。在複製你已經放入的內容並更改變量名稱後,* *會起作用。 星號的原因是,如果用戶增加值,它的工作原理。但是,如果他們降低價值,那麼我就很難理解爲什麼! – Hector 2013-02-17 03:35:03

+0

@ user2036256:如果它們減小了值,則deltaA是一個負數,但方程完全不變。 – 2013-02-17 03:48:03