कार्य सरल है। मुझे कुछ मिलता है 1000
, 500
और 100
नोट्स।
कैसे ? आप पूछ सकते हैं। चिंता न करें, बैंक को लूटने की कोई जरूरत नहीं है क्योंकि पास में एक एटीएम है जो आपके क्रेडिट कार्ड को स्वीकार करता है। लेकिन आपकी क्रेडिट सीमा केवल कार्य के लिए पर्याप्त है इसलिए आपको निकासी से सावधान रहना होगा।
चुनौती
कम से कम उन कई नोटों को प्राप्त करने के लिए आवश्यक विशिष्ट निकासी की गणना करें 1000
, 500
और 100
आवश्यक नोटों की संख्या को देखते हुए । प्रत्येक निकासी में, एटीएम निम्नलिखित नियमों के आधार पर प्रत्येक नोट को थूक सकता है:
- से निकाली गई राशि (
A
) से कम है5000
- अगर
A%1000 == 0
, तो ATM 1500
नोट, 5100
नोट और बाकी1000
नोट्स खर्च करता है - इसके अलावा
A%500 == 0
, अगर एटीएम में 5100
नोट हैं, तो बाकी1000
नोट - अगर
A%1000 < 500
, एटीएमfloor(A/1000)
1000
ने नोट उगल दिए और100
नोट बंद कर दिए - अगर
A%1000 > 500
, एटीएमfloor(A/1000)
1000
ने नोट थमाए , तो 1500
और बाकी के100
नोट
- अगर
- निकाली गई राशि के बराबर से अधिक है
5000
- अगर
A%1000 == 0
, तो एटीएम 2500
नोट और बाकी1000
नोटों को खर्च करता है - अगर,
A%500 == 0
एटीएम 1500
नोट और बाकी1000
नोटों को खर्च करता है - अगर
A%1000 < 500
, एटीएमfloor(A/1000)
1000
ने नोट उगल दिए और100
नोट बंद कर दिए - अगर
A%1000 > 500
, एटीएम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
मार्टिन द्वारा प्रदान की गई सूची
कैच
चूंकि आपके क्रेडिट कार्ड में क्रेडिट सीमा पर्याप्त है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि नोटों में दिए गए इनपुट / आवश्यकता के लिए निकासी के दौरान निकाली गई कुल राशि न्यूनतम संभव है ।
इनपुट
मूल्य के लिए आवश्यक नोटों की संख्या के अनुरूप तीन संख्याओं के लिए इनपुट किसी भी अनुकूल प्रारूप में हो सकता है 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
मान्यताओं
- आप मान सकते हैं कि एटीएम में प्रत्येक राशि के नोटों की अनंत संख्या है।
- आप यह भी मान सकते हैं कि आप कितने भी लेन-देन कर सकते हैं।
- इसके अलावा, कुछ इनपुट मूल्यों का समाधान अद्वितीय नहीं हो सकता है, इसलिए आप समाधान के किसी भी 1 को आउटपुट कर सकते हैं जो न्यूनतम संभव राशि और न्यूनतम नोट आवश्यक शर्तों को पूरा करता है।
हमेशा की तरह, आप STDIN / ARGV के माध्यम से एक पूरा प्रोग्राम रीडिंग इनपुट लिख सकते हैं और STDOUT या प्रिंटिंग फ़ंक्शन के लिए तर्कों के माध्यम से इनपुट ले सकते हैं और राशियों की एक सूची या रिटर्न के साथ पूर्णांक की एक सूची या एक नई लाइन द्वारा अलग किए गए मात्रा के साथ एक स्ट्रिंग दे सकते हैं।
यह कोड-गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा कोड है।
21 14 2
उचित समय में समाप्त हो जाना चाहिए ?