计算工资增量

时间:2010-06-30 03:22:40

标签: math

  

在公司中,有三类:A,B,C。

     

他们想要增加。因此,如果C类获得N%作为增量。 B类增量为2N%,A类增量为3N%。但增量应至少为1%,总更新工资不应超过50,000美元。

     

打印特定员工的增量和总更新工资。

     

假设所有必需的变量。

如何解决上述问题,似乎有许多未知参数,例如SALARY ASALARY BSALARY C和增量N。 在限制范围内寻找N的最大可能值

5 个答案:

答案 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值。在这种情况下,你需要决定你想做什么:

  • 不给任何人支付(违反&gt; = 1%规则)。
  • 给每个人1%(违反$ 50K上限规则)。
  • 给每个人1%,但上限为$ 50K(违反1,2,3乘数规则)。

一旦你从该代码中获得百分比增加(决定如何处理冲突的要求),你可以将它传递到上面的第一段代码中,实际上并打印更新

答案 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}

这里的模式是:

  1. 确定更高的增量会带来什么
  2. 根据您的约束验证这些值仍然有效
  3. 重复
  4. 返回最大有效结果,丢弃第一个无效结果

答案 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<50000Y=N 然后Y=(X-M)*K线性方程式