งานง่าย ได้รับฉันบาง1000
, 500
และ100
บันทึก
ได้อย่างไร คุณอาจถาม ไม่ต้องกังวลไม่ต้องปล้นธนาคารเพราะมีตู้เอทีเอ็มอยู่ใกล้ ๆ ซึ่งรับบัตรเครดิตของคุณ แต่วงเงินเครดิตของคุณเพียงพอสำหรับงานดังนั้นคุณต้องระมัดระวังในการถอนเงิน
ท้าทาย
ได้รับหมายเลขของ1000
, 500
และ100
บันทึกจำเป็นต้องคำนวณถอนเฉพาะที่จำเป็นในการได้รับการบันทึกจำนวนมากอย่างน้อยผู้ ในการถอนแต่ละครั้ง ATM สามารถคายธนบัตรแต่ละใบตามกฎต่อไปนี้:
- จำนวนเงินที่ถอน (
A
) น้อยกว่า5000
- ถ้า
A%1000 == 0
, จากนั้นเอทีเอ็มใช้500
ธนบัตร1 ใบ,100
ธนบัตร5 ใบและ1000
ธนบัตรที่เหลือ - มิฉะนั้นถ้า
A%500 == 0
ตู้ ATM แบ่ง100
ธนบัตร5 ใบและพัก1000
ธนบัตร - มิฉะนั้น
A%1000 < 500
ตู้ ATM จะแยกfloor(A/1000)
1000
ธนบัตรและ100
ธนบัตรที่เหลือ - มิฉะนั้นถ้า
A%1000 > 500
ตู้ ATM แตกfloor(A/1000)
1000
ธนบัตร 1500
และ100
ธนบัตรที่เหลือ
- ถ้า
- จำนวนเงินที่ถอนได้มีค่ามากกว่าเท่ากับ
5000
- ถ้า
A%1000 == 0
เครื่อง ATM ใช้ 2500
บันทึกและพัก1000
หมายเหตุ - หรือถ้าอื่น ๆ
A%500 == 0
ตู้ ATM จะแยก500
ธนบัตร1 ใบและ1000
ธนบัตรที่เหลือ - มิฉะนั้น
A%1000 < 500
ตู้ ATM จะแยกfloor(A/1000)
1000
ธนบัตรและ100
ธนบัตรที่เหลือ - มิฉะนั้นถ้า
A%1000 > 500
ตู้ ATM แตกfloor(A/1000)
1000
ธนบัตร 1500
และ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
เสร็จในเวลาที่เหมาะสมหรือไม่