Là một phần của đơn xin việc gần đây, tôi được yêu cầu viết mã giải pháp cho vấn đề này.Xóa mọi người 'kth' khỏi vòng kết nối. Tìm người còn lại cuối cùng
Given,
- n = số người đứng trong một vòng tròn.
- k = số người để đếm lại mỗi lần
Mỗi người được đưa ra một độc đáo (incrementing) id. Bắt đầu với người đầu tiên (id thấp nhất), họ bắt đầu đếm từ 1 đến k.
Người tại k sau đó sẽ bị xóa và vòng kết nối sẽ kết thúc. Người còn lại tiếp theo (sau người bị loại) tiếp tục đếm tại 1. Quá trình này lặp lại cho đến khi chỉ còn một người, người chiến thắng.
Các giải pháp phải cung cấp:
- id của mỗi người theo thứ tự chúng được đưa ra khỏi vòng tròn
- id của người chiến thắng.
chế Hiệu suất:
- Sử dụng ít bộ nhớ càng tốt.
- Làm cho giải pháp chạy nhanh nhất có thể.
Tôi nhớ đã làm điều tương tự trong khóa học CS của mình từ nhiều năm trước nhưng không thể nhớ lại chi tiết tại thời điểm kiểm tra này. Bây giờ tôi nhận ra nó là một vấn đề cổ điển, nổi tiếng với nhiều giải pháp. (Tôi sẽ không đề cập đến nó theo tên nào được nêu ra như một số chỉ có thể 'wikipedia' một câu trả lời).
Tôi đã gửi giải pháp của mình nên tôi hoàn toàn không tìm kiếm người để trả lời nó cho tôi. Tôi sẽ cung cấp cho nó một chút sau đó một lần/nếu những người khác đã cung cấp một số câu trả lời.
Mục tiêu chính của tôi khi đặt câu hỏi này là xem cách giải pháp của tôi so sánh với những người khác đã đưa ra các yêu cầu và ràng buộc.
(Lưu ý các yêu cầu một cách cẩn thận như tôi nghĩ rằng họ có thể làm mất hiệu lực một số các giải pháp 'cổ điển'.)
Chúng ta phải che mắt và hát một chút vần điệu khi chúng ta làm điều đó? ;-) – Spudley
@Tony, làm thế nào về việc cung cấp một câu trả lời sau đó? Nếu vấn đề FizzBuzz là khó khăn cho nhiều nhà phát triển để có được quyền tôi không thấy làm thế nào đây là 'stupidly dễ dàng'. – Ash
"Tôi sẽ không đề cập đến nó theo tên" - tôi có nghĩ rằng tên bắt đầu bằng chữ J không? Và đó là (ví dụ như rất nhiều vấn đề Euler) tuân theo giải pháp bằng toán học, chứ không phải là tính toán, phương pháp? – AakashM