2015-01-20 18 views
0

我知道這是基本的鈣,但我有點生疏,我想確保我做對了。如何從總分和已知因素中獲取用戶級別?

我在我的網站上實現了一個用戶級別的系統,我需要在他們的個人資料上顯示每個用戶的級別。他們已經有了一些觀點,我想從中計算出他們的水平。

我想將水平提高3倍,其中第一水平只有1分。

所以,我將進行如下:

level = 0; 
factor = 3; 
points = 243; //as an example, this would be level 6. 

while (points >= 1) { 
    points = points/factor; 
    level++; 
} 

什麼,你會建議我做什麼?這是最好的方法嗎?有沒有更有效的方法?我正在尋找性能和可擴展性。

+0

_'我想確定我做得對' - 大多數人通過運行它並將結果與​​其目標進行比較來測試他們的代碼。這裏只有少量的代碼 - 你想讓我們說什麼? – 2015-01-20 23:17:02

回答

1

最簡單的方法是在您的語言中使用等效的ceiling(log base 3 of (points + 0.5))。 這裏的+0.5修復了可能的浮點錯誤,並允許使用0來獲得點。

例如在Python:

import math 

def levels(points): 
    return math.ceil(math.log(points + 0.5, 3)) 

在C/C++:

#include "math.h" 

int levels(int points) { 
    return 1 + (int)(log(points + 0.5)/log(3.0)); 
} 

等。

如果這種方法在您的目標語言中對您的口味過於緩慢,那麼請按照您的建議進行:循環中的分區。

+0

我喜歡你的答案。我正在使用php ...我將不得不測試哪種方式更快。 – Gixty 2015-01-20 23:39:59

+0

在php中,可能是這樣的:'log(points + 0.5,3);'? – Gixty 2015-01-20 23:46:55

+1

@Gixty使用log的方法實際上可能在PHP中速度更快(它可能直接推遲到C++庫),而不是從3-6級左右的分區開始。在PHP中,我認爲'ceil(log(points + 0.5,3))'會起作用。 – Kolmar 2015-01-20 23:48:18