Đề bài
Hệ thống tính lương coi mọi nhân viên là một Employee có phương thức WeeklyPay(), và mỗi loại nhân viên ghi đè phương thức đó.
Mỗi nhân viên được viết như sau:
salaried <annual>: nhận annual / 52.hourly <rate> <hours>: nhận rate × hours cho 40 giờ đầu và 1.5 × rate cho mỗi giờ vượt quá 40.commission <base> <rate> <sales>: nhận base + rate × sales.
Hãy viết weekly_payroll(employees).
Đầu vào
employees: Các nhân viên. Số có thể có phần thập phân.
Đầu ra
Trả về tổng lương trong tuần. Đáp án sai lệch không quá 1e-6 được chấp nhận.
Ràng buộc
0 ≤ số nhân viên ≤ 10,000
Mọi số nằm trong khoảng 0 đến 10^7; hours ≤ 100
Ví dụ
Đầu vào:
employees = ["salaried 52000", "hourly 20 45"]
Kết quả mong đợi:
expected = 1950.0
Đầu vào:
std::vector<std::string> employees = {"salaried 52000", "hourly 20 45"};
Kết quả mong đợi:
double expected = 1950.0;
Đầu vào:
string[] employees = new string[] {"salaried 52000", "hourly 20 45"};
Kết quả mong đợi:
double expected = 1950.0;
Giải thích
Nhân viên lương cố định nhận 52000 / 52 = 1000. Nhân viên theo giờ nhận 20 × 40 + 30 × 5 = 950. Tổng 1950.
Đầu vào:
employees = ["commission 300 0.1 2500"]
Kết quả mong đợi:
expected = 550.0
Đầu vào:
std::vector<std::string> employees = {"commission 300 0.1 2500"};
Kết quả mong đợi:
double expected = 550.0;
Đầu vào:
string[] employees = new string[] {"commission 300 0.1 2500"};
Kết quả mong đợi:
double expected = 550.0;
Giải thích
300 + 0.1 × 2500 = 550.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Xử lý mỗi loại nhân viên bằng công thức riêng.
Gợi ý 2
Lương theo giờ tính bình thường cho 40 giờ đầu và 1.5 lần sau đó.
Gợi ý 3
Giữ phần thập phân: lương năm chia 52 hiếm khi ra số nguyên.
Độ phức tạp mong đợi
thời gian O(số nhân viên), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.