Nhiệm vụ rất đơn giản. Nhận cho tôi một số 1000
, 500
và 100
ghi chú.
Làm sao ? bạn có thể hỏi Đừng lo lắng, không cần phải cướp ngân hàng vì có ATM gần đó chấp nhận thẻ tín dụng của bạn. Nhưng hạn mức tín dụng của bạn chỉ đủ cho nhiệm vụ nên bạn phải cẩn thận với việc rút tiền.
Thử thách
Căn cứ vào số lượng 1000
, 500
và 100
ghi chú cần thiết, tính toán rút tiền cụ thể cần thiết để có được ít nhất là những ghi chú rất nhiều. Trong mỗi lần rút tiền, ATM có thể phun ra từng lưu ý dựa trên các quy tắc sau:
- Số tiền đã rút (
A
) ít hơn5000
- Nếu
A%1000 == 0
, sau đó ATM nhổ 1500
nốt, 5100
nốt và1000
ghi chú nghỉ - Khác
A%500 == 0
, nếu ATM nhổ 5100
nốt,1000
ghi chú nghỉ - Khác nếu
A%1000 < 500
, ATM nhổ cácfloor(A/1000)
1000
ghi chú và100
ghi chú nghỉ ngơi - Khác nếu
A%1000 > 500
, ATM nhổ cácfloor(A/1000)
1000
ghi chú, 1500
và100
ghi chú nghỉ ngơi
- Nếu
- Số tiền đã rút lớn hơn bằng
5000
- Nếu
A%1000 == 0
, sau đó ATM nhổ 2500
ghi chú và1000
ghi chú nghỉ ngơi - Khác, nếu,
A%500 == 0
ATM nhổ 1500
nốt và1000
ghi chú nghỉ - Khác nếu
A%1000 < 500
, ATM nhổ cácfloor(A/1000)
1000
ghi chú và100
ghi chú nghỉ ngơi - Khác nếu
A%1000 > 500
, ATM nhổ cácfloor(A/1000)
1000
ghi chú, 1500
và100
ghi chú nghỉ ngơi
- Nếu
Để làm rõ, đây là một bảng ghi chú hoàn chỉnh được rút cho tất cả số tiền có thể lên tới 7000
(bạn có thể rút thêm, nhưng mẫu không thay đổi sau đó). Thứ tự là <1000> <500> <100>
:
100 => 0 0 1 2500 => 2 0 5 4800 => 4 1 3
200 => 0 0 2 2600 => 2 1 1 4900 => 4 1 4
300 => 0 0 3 2700 => 2 1 2 5000 => 4 2 0
400 => 0 0 4 2800 => 2 1 3 5100 => 5 0 1
500 => 0 0 5 2900 => 2 1 4 5200 => 5 0 2
600 => 0 1 1 3000 => 2 1 5 5300 => 5 0 3
700 => 0 1 2 3100 => 3 0 1 5400 => 5 0 4
800 => 0 1 3 3200 => 3 0 2 5500 => 5 1 0
900 => 0 1 4 3300 => 3 0 3 5600 => 5 1 1
1000 => 0 1 5 3400 => 3 0 4 5700 => 5 1 2
1100 => 1 0 1 3500 => 3 0 5 5800 => 5 1 3
1200 => 1 0 2 3600 => 3 1 1 5900 => 5 1 4
1300 => 1 0 3 3700 => 3 1 2 6000 => 5 2 0
1400 => 1 0 4 3800 => 3 1 3 6100 => 6 0 1
1500 => 1 0 5 3900 => 3 1 4 6200 => 6 0 2
1600 => 1 1 1 4000 => 3 1 5 6300 => 6 0 3
1700 => 1 1 2 4100 => 4 0 1 6400 => 6 0 4
1800 => 1 1 3 4200 => 4 0 2 6500 => 6 1 0
1900 => 1 1 4 4300 => 4 0 3 6600 => 6 1 1
2000 => 1 1 5 4400 => 4 0 4 6700 => 6 1 2
2100 => 2 0 1 4500 => 4 0 5 6800 => 6 1 3
2200 => 2 0 2 4600 => 4 1 1 6900 => 6 1 4
2300 => 2 0 3 4700 => 4 1 2 7000 => 6 2 0
2400 => 2 0 4
Danh sách được cung cấp bởi Martin
Cuộc đuổi bắt
Vì giới hạn tín dụng trong thẻ tín dụng của bạn là vừa đủ, bạn cần đảm bảo rằng tổng số tiền được rút trong các lần rút là mức tối thiểu có thể cho đầu vào / yêu cầu ghi chú đã cho.
Đầu vào
Đầu vào có thể ở bất kỳ định dạng thuận lợi cho ba số tương ứng với số lượng ghi chú cần thiết có giá trị 1000
, 500
và 100
. Không nhất thiết phải theo thứ tự đó.
Đầu ra
Đầu ra là số tiền được rút trong mỗi giao dịch được phân tách bằng một dòng mới.
Ví dụ
Đầu vào (định dạng <1000> <500> <100>
):
3 4 1
Đầu ra:
600
600
600
3600
một ít nữa:
7 2 5
5000
3500
1 2 3
600
1700
21 14 2
600
600
600
1600
5000
5000
5000
5000
5000
Giả định
- Bạn có thể cho rằng ATM có số lượng ghi chú vô hạn của từng số tiền.
- Bạn cũng có thể cho rằng bạn có thể thực hiện bất kỳ số lượng giao dịch nào.
- Hơn nữa, giải pháp cho một số giá trị đầu vào có thể không phải là duy nhất, vì vậy bạn có thể xuất bất kỳ 1 trong số các giải pháp đáp ứng số lượng tối thiểu có thể và các điều kiện tối thiểu cần thiết.
Như thường lệ, bạn có thể viết một chương trình đọc đầu vào đầy đủ thông qua STDIN / ARGV và in đầu ra sang STDOUT hoặc một hàm lấy đầu vào thông qua các đối số và trả về một danh sách các số nguyên tương ứng với số lượng hoặc một chuỗi với số lượng được phân tách bằng một dòng mới.
Đây là mã golf để mã ngắn nhất tính theo byte thắng.
21 14 2
kết thúc trong một thời gian hợp lý?