在公司中,有三类:A,B,C。
他们想要增加。因此,如果C类获得N%作为增量。 B类增量为2N%,A类增量为3N%。但增量应至少为1%,总更新工资不应超过50,000美元。
打印特定员工的增量和总更新工资。
假设所有必需的变量。
如何解决上述问题,似乎有许多未知参数,例如SALARY A
,SALARY B
,SALARY C
和增量N
。
在限制范围内寻找N的最大可能值
答案 0 :(得分:4)
如果您正在寻求对员工进行简单的程序更新,您还没有指定一种语言(这很好,因为我只提供了家庭作业的伪代码),但这里是:
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的价值,这将使最高工资达到$ 50K。
您只需要通过每位员工并计算最大百分比:
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
例如,如果C类员工已经达到$ 50K,则可以提出小于1的N
值。在这种情况下,你需要决定你想做什么:
一旦你从该代码中获得百分比增加(决定如何处理冲突的要求),你可以将它传递到上面的第一段代码中,实际上做并打印更新
答案 1 :(得分:1)
为任何一组工资计算最大N:
如果N是百分比,则n为N / 100(使数学运算更容易)。让每个类别的薪水分别为a,b和c。
由于n> = 0.01,且工资加上增量&lt; = 50000,我们可以假设工资大于0,那么
0 < a <= 50000 * (1 - n)
0 < b <= 50000 * (1 - 2 * n)
0 < c <= 50000 * (1 - 3 * n)
最后一行对n赋予最强的限制 - 即0.01 <= n <1。 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
所以你只需要右边的最小值。
答案 2 :(得分:0)
给出三份雇员工资清单,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}
这里的模式是:
答案 3 :(得分:0)
计算当前薪水与$ 50,000之间的增量。 ratio=(50000-current)/current
。然后转换为100以上的百分比。N=100*ratio-100
。如果Employee在C类中,则返回N.如果Employee在B类中,则设N = N / 2。返回N.如果员工属于A类,则设N = N / 3。返回N。
答案 4 :(得分:-1)
缺失的变量是每个类别中的员工数量,当然并非所有员工都有相同的薪水,这就是为什么我们需要平均薪水和每个类别中的员工数量。
假设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
线性方程式