작업은 간단합니다. 좀 가져 오기 1000
, 500
및 100
메모를.
어떻게 요? 당신은 요청할 수 있습니다. 신용 카드를 사용할 수있는 ATM이 근처에 있으므로 은행을 강탈 할 필요가 없습니다. 그러나 귀하의 신용 한도는 업무에 충분하므로 인출에주의해야합니다.
도전
의 수를 감안할 때 1000
, 500
그리고 100
노트 필요, 적어도 그 많은 메모를 얻기 위해 필요한 특정 인출을 계산합니다. 각 인출에서 ATM은 다음 규칙에 따라 각 메모를 내뱉을 수 있습니다.
- 인출 된 금액 (
A
)이5000
- 인 경우
A%1000 == 0
ATM은 1 개의500
노트, 5 개의100
노트 및 나머지1000
노트를 뱉습니다. - 그렇지 않으면
A%500 == 0
ATM이 5 개의100
노트를 뱉고 나머지는1000
노트를 뱉습니다 - 그렇지 않은 경우
A%1000 < 500
는 ATM 가래침,floor(A/1000)
1000
노트와 나머지100
노트 - 그렇지 않으면
A%1000 > 500
ATM이floor(A/1000)
1000
메모를 뱉고, 메모를 남기고500
나머지100
메모
- 인 경우
- 인출 된 금액이 다음보다 큽니다.
5000
- 인 경우
A%1000 == 0
, ATM은 2 개의500
메모를 뱉고 나머지는1000
메모합니다 - 그렇지 않으면
A%500 == 0
ATM이 1 개의500
노트를 뱉고 나머지는1000
노트를 뱉습니다 - 그렇지 않은 경우
A%1000 < 500
는 ATM 가래침,floor(A/1000)
1000
노트와 나머지100
노트 - 그렇지 않으면
A%1000 > 500
ATM이floor(A/1000)
1000
메모를 뱉고, 메모를 남기고500
나머지100
메모
- 인 경우
설명을 위해 가능한 모든 금액에 대해 철회 한 전체 메모 테이블 7000
이 있습니다 (더 이상 철회 할 수 있지만 나중에 패턴이 변경되지는 않음). 순서는 <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
Martin에서 제공 한 목록
캐치
신용 카드의 신용 한도는 충분하기 때문에 출금을 통해 인출 된 총액 이 주어진 메모의 입력 / 요구 사항에 대해 가능한 최소값 인지 확인해야합니다 .
입력
입력 값 요구 사항의 수에 해당하는 세 개의 숫자에 대한 어떠한 유리한 형식 일 수 있습니다 1000
, 500
하고 100
. 반드시 그런 순서는 아닙니다.
산출
출력은 각 거래에서 인출 할 금액을 줄 바꿈으로 구분합니다.
예
입력 (형식 <1000> <500> <100>
) :
3 4 1
산출:
600
600
600
3600
몇 가지 더 :
7 2 5
5000
3500
1 2 3
600
1700
21 14 2
600
600
600
1600
5000
5000
5000
5000
5000
가정
- ATM에는 각 금액에 대해 무한한 수의 메모가 있다고 가정 할 수 있습니다.
- 또한 많은 수의 거래를 할 수 있다고 가정 할 수도 있습니다.
- 또한 일부 입력 값에 대한 솔루션은 고유하지 않을 수 있으므로 가능한 최소량 및 최소 요구 사항을 충족하는 솔루션 중 하나를 출력 할 수 있습니다.
평소와 같이 STDIN / ARGV를 통해 입력을 읽고 전체 출력을 STDOUT에 출력하거나 인수를 통해 입력을받는 함수를 작성하여 양에 해당하는 정수 목록 또는 양을 새 행으로 구분 한 문자열을 리턴 할 수 있습니다.
이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 승리합니다.
21 14 2
가 적절한 시간 내에 완료 되어야합니까 ?