在一家公司中,有三類:A,B,C。計算工資增量
他們想給一個增量。所以如果C類以增量的形式獲得N%。 B類的增量爲2N%,A類的增量爲3N%。但增量應該至少爲1%,總更新薪水不應超過5萬美元。
打印增量和特定員工的總更新薪水。
假設所有需要的變量。
我如何解決以上,似乎有許多未知的參數,如SALARY A
,SALARY B
,SALARY C
,並增加N
。 在限制範圍內尋找N的最大可能值
在一家公司中,有三類:A,B,C。計算工資增量
他們想給一個增量。所以如果C類以增量的形式獲得N%。 B類的增量爲2N%,A類的增量爲3N%。但增量應該至少爲1%,總更新薪水不應超過5萬美元。
打印增量和特定員工的總更新薪水。
假設所有需要的變量。
我如何解決以上,似乎有許多未知的參數,如SALARY A
,SALARY B
,SALARY C
,並增加N
。 在限制範圍內尋找N的最大可能值
如果您希望實施一個簡單的員工程序更新,您還沒有指定一種語言(這很好,因爲我只提供作業的僞代碼反正),但在這裏它是:
def update (N,MAX)
if N < 1:
return
for every employee E:
select E.catagory:
if 'C':
E.salary = E.salary * (1 + N/100)
endif
if 'B':
E.salary = E.salary * (1 + 2 * N/100)
endif
if 'A':
E.salary = E.salary * (1 + 3 * N/100)
endif
endselect
if E.salary > MAX:
E.salary = MAX
endif
print E.name " is now on a wage of $" E.salary
endfor
enddef
現在您任務是翻譯成你如果你婉實現這一點:-)
任何語言要解決方程中的所有未知因素,你有一個問題(相互矛盾的要求)。看起來你可能是在N的價值之後,這將使最大工資達到5萬美元。
你只需要通過每一位員工,並計算最大百分比出來:
def update (MAX) returns N:
N = Infinity
for every employee E:
select E.catagory:
if 'C':
ThisN = MAX/E.salary - 1
endif
if 'B':
ThisN = (MAX/E.salary - 1)/2
endif
if 'A':
ThisN = (MAX/E.salary - 1)/3
endif
endselect
if ThisN < N:
N = ThisN
endif
endfor
if N < 1:
# Conflicting requirement
endif
enddef
有可能拿出的N
的值是小於1,如果,例如,C類員工已經在5萬美元了。你需要決定你想在這種情況下做什麼,或者:
一旦你從代碼(你什麼爲相互衝突的要求做決定)增加的百分比,你可以將它傳遞到第一塊上面的代碼實際上做和打印更新。
要剛工作了最大值N的任何一組的工資:
如果N是一個百分比,令n爲N/100(使數學更容易)。讓每個類別的工資分別爲a,b和c。
由於n> = 0。01,而且薪水加上增量< = 50000,我們可以假設一個薪水大於0,則
0 < a <= 50000 * (1 - n)
0 < b <= 50000 * (1 - 2 * n)
0 < c <= 50000 * (1 - 3 * n)
最後一行把最強的限制上N - 即0.01 < = N < 0.333 .. 。
您可能需要知道最低工資:)
如果你確實有數據爲員工,那麼最多N將取決於最高工資在每個類別的員工。
max(a) <= 50000 * (1 - n)
max(b) <= 50000 * (1 - 2 * n)
max(c) <= 50000 * (1 - 3 * n)
所以我們有幾個要求N:
n <= 1 - max(a)/50000
n <= 1/2 - max(b)/100000
n <= 1/3 - max(c)/150000
所以你只需要最低值的右側。
您還沒有編碼「A獲得3N,B獲得2N,C獲得N」部分等等。 – 2010-06-30 04:05:23
對不起馬克 - 這是一個正在進行的工作:) – sje397 2010-06-30 04:26:06
與你很好的討論和感謝您的意見 – 2010-06-30 07:13:29
考慮三個列表僱員工資,A,B,C的,
Set Increment=0%
Set TempNewSalaries{A,B,C} = {A+3*Increment%, B+2*Increment%, C+Increment%}
Set NewSalaries{A,B,C} = TempNewSalaries{A,B,C}
While MaximumSalaryOfAll TempNewSalaries{A,B,C} <= 50000
Set NewSalaries{A,B,C} = TempNewSalaries{A,B,C}
Increment = (Increment+1)%
Set TempNewSalaries{A,B,C} = {A+3*Increment%, B+2*Increment%, C+Increment%}
End While
Return NewSalaries{A,B,C}
在這裏模式是:
計算當前工資和$ 50,000之間的增量。 ratio=(50000-current)/current
。然後轉換爲100以上的百分比。N=100*ratio-100
。如果員工屬於C類,則返回N.如果員工屬於B類,則設N = N/2。如果員工屬於A類,則讓N = N/3。返回N.
這對於一名員工和類別找到滿足條件的N最有效。 – maxwellb 2010-06-30 04:37:38
缺少的變量是每個類別中的員工數量,當然並不是所有人都有相同的工資,這就是爲什麼我們需要平均工資和每個類別中的員工數量。
假設平均工資A類是SA,B是SB和C是SC
假定爲A類的錄用數爲NA,B是NB和C是NC
然後
50,000 = ((3N*SA*NA) +(2N*SB*NB)+(N*SC*NC))/100 + ((SA*NA) +(SB*NB)+(SC*NC))
N= ((50,000 -((SA*NA) +(SB*NB)+(SC*NC))) *100)/((3*SA*NA)+(2*SB*NB)+(SC*NC))
讓我們假設不變 K =100/ ((3*SA*NA)+(2*SB*NB)+(SC*NC))
M=((SA*NA) +(SB*NB)+(SC*NC))
金額0<X<50000
和Y=N
然後Y=(X-M)*K
線性方程
使用平均值將不符合在50k限額內沒有增加任何員工工資的要求。 – sje397 2010-06-30 05:37:08
@ sje397:要求是「總更新薪水不應超過$ 50,000」。和5 * 10^6來自50,000 * 100參見前面的等式。 – 2010-06-30 05:44:47
您是否正在尋找限制範圍內的_maximum_的可能值? – 2010-06-30 03:27:51
請閱讀所有答案和討論。 – 2010-06-30 06:27:53