Если вы хотите внедрить простое процедурное обновление сотрудников, вы не указали язык (что хорошо, поскольку я предоставляю только псевдокод для домашней работы в любом случае), но здесь это:
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, если, например, сотрудник категории С уже на $ 50 тыс. Вам нужно решить, что вы хотите сделать в этом случае:
- никому не дается payrise (нарушает правило> = 1%).
- дать каждому 1% (нарушает правило ограничения $ 50K).
- дают каждому 1%, но колпачок составляет 50 долларов США (нарушает правило множителя 1,2,3).
После того как вы процентное увеличение от этого кода (с вашим решением о том, что делать для противоречивых требований), вы можете передать его в первый кусок кода выше, на самом деле сделать и распечатать обновления.
Вы ищете _maximum_ возможное значение N в пределах ограничений? –
Пожалуйста, прочитайте все ответы и обсуждения. –