在一家公司中,有三类: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