К списку задач
Средне Решено: 0 Процент решений: 0%

Недельная зарплата

Посчитайте зарплату за неделю для сотрудников на окладе, почасовой оплате и комиссии — у каждого своё правило.

Чему вы научитесь

  • Считать оплату по правилу для каждого вида сотрудника
  • Оплачивать часы сверх 40 как сверхурочные
  • Точно складывать дробные суммы

Условие

Система расчёта зарплаты считает каждого сотрудника объектом Employee с методом WeeklyPay(), а каждый вид сотрудника переопределяет его.

Каждый сотрудник записан так:

  • salaried <annual>: получает annual / 52.
  • hourly <rate> <hours>: получает rate × hours за первые 40 часов и 1.5 × rate за каждый час сверх 40.
  • commission <base> <rate> <sales>: получает base + rate × sales.

Реализуйте weekly_payroll(employees).

Входные данные

employees: Сотрудники. Числа могут быть дробными.

Выходные данные

Верните общую зарплату за неделю. Ответы с погрешностью до 1e-6 принимаются.

Ограничения

0 ≤ число сотрудников ≤ 10,000

Все числа от 0 до 10^7; hours ≤ 100

Примеры

Пример 1
Ввод:
employees = ["salaried 52000", "hourly 20 45"]

Ожидаемый вывод:
expected = 1950.0
Ввод:
std::vector<std::string> employees = {"salaried 52000", "hourly 20 45"};

Ожидаемый вывод:
double expected = 1950.0;
Ввод:
string[] employees = new string[] {"salaried 52000", "hourly 20 45"};

Ожидаемый вывод:
double expected = 1950.0;

Пояснение

Сотрудник на окладе получает 52000 / 52 = 1000. Почасовой получает 20 × 40 + 30 × 5 = 950. Итого 1950.

Пример 2
Ввод:
employees = ["commission 300 0.1 2500"]

Ожидаемый вывод:
expected = 550.0
Ввод:
std::vector<std::string> employees = {"commission 300 0.1 2500"};

Ожидаемый вывод:
double expected = 550.0;
Ввод:
string[] employees = new string[] {"commission 300 0.1 2500"};

Ожидаемый вывод:
double expected = 550.0;

Пояснение

300 + 0.1 × 2500 = 550.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Для каждого вида сотрудника используйте свою формулу.

Подсказка 2

Почасовая оплата обычная за первые 40 часов, а дальше в 1.5 раза выше.

Подсказка 3

Сохраняйте дробную часть: годовой оклад, делённый на 52, редко даёт целое.

Ожидаемая сложность

время O(число сотрудников), доп. память O(1)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.