Вычислить прирост зарплаты - PullRequest
0 голосов
/ 30 июня 2010

В компании есть три категории: A, B, C.

Они хотят дать приращение.Так что если категория C получает N% в качестве приращения.категория B получает 2N% в качестве приращения, а категория A получает 3N% в качестве приращения.Но приращение должно составлять не менее 1%, а общая обновленная зарплата не должна превышать $ 50 000.

Вывести инкремент и общую обновленную зарплату для конкретного сотрудника.

Примите все необходимые переменные.

Как решить вышеизложенное, похоже, существует много неизвестных параметров, таких как SALARY A, SALARY B, SALARY C и приращение N.ищем максимально возможное значение N в пределах ограничения

Ответы [ 5 ]

4 голосов
/ 30 июня 2010

Если вы хотите внедрить простое процедурное обновление сотрудников, вы не указали язык (что хорошо, так как я все равно предоставляю псевдокод для домашней работы), но вот оно:

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, которое даст наибольшую зарплату в 50 тысяч долларов.

Вам просто нужно пройти через каждого сотрудника и вычислить максимальный процент:

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 уже стоит 50 тыс. Долларов. Вам нужно решить, что вы хотите сделать в этом случае, либо:

  • никто не платит (нарушает правило> = 1%).
  • дать каждому 1% (нарушает правило ограничения в $ 50K).
  • дают каждому 1%, но ограничение составляет $ 50K (нарушает правило множителя 1,2,3).

Как только у вас будет процентное увеличение от этого кода (с вашим решением о том, что делать для противоречивых требований), вы можете передать его в первый фрагмент кода выше для фактического do и распечатать обновление .

1 голос
/ 30 июня 2010

Чтобы определить максимальное N для любого набора зарплат:

Если N - это процент, пусть n будет N / 100 (для упрощения математики).Пусть зарплата для каждой категории будет a, b и c соответственно.

Поскольку n> = 0,01, а зарплата плюс приращение <= 50000, и мы можем предположить, что зарплата больше 0, тогда </p>

0 < a <= 50000 * (1 - n)
0 < b <= 50000 * (1 - 2 * n)
0 < c <= 50000 * (1 - 3 * n)

Последняя строка устанавливает самое сильное ограничение для n - т. Е. 0,01 <= n <0,333 ... </p>

Возможно, вам потребуется знать минимальную заработную плату:)

Если у вас действительно есть данные о сотрудниках, то максимальное 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

Так что вам просто нужно минимум значений справа.

0 голосов
/ 30 июня 2010

Отсутствует переменная - количество сотрудников в каждой категории, и, конечно, не все из них имеют одинаковую зарплату, поэтому нам нужна средняя зарплата и количество сотрудников в каждой категории.

Предположим, что средняя зарплата для категории 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 линейное уравнение

0 голосов
/ 30 июня 2010

Рассчитать прирост между текущей зарплатой и 50 000 долларов США.ratio=(50000-current)/current.Затем конвертируйте в проценты выше 100. N=100*ratio-100.Если Сотрудник находится в категории C, верните N. Если Сотрудник находится в категории B, пусть N = N / 2.Вернуть N. Если сотрудник относится к категории A, пусть N = N / 3.Вернуть Н.

0 голосов
/ 30 июня 2010

С учетом трех списков зарплат работников, 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. Возвращает максимально допустимый результат, отбрасывая первый недействительный результат
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...