কাজটি সহজ। আমাকে কিছু পান 1000
, 500
এবং 100
নোট।
কীভাবে? আপনি জিজ্ঞাসা করতে পারেন। চিন্তা করবেন না, কাছাকাছি এটিএম রয়েছে যা আপনার ক্রেডিট কার্ড গ্রহণ করে তাই কোনও ব্যাংক ডাকাতির দরকার নেই। তবে আপনার ক্রেডিট সীমা কার্যের পক্ষে যথেষ্ট তাই আপনাকে প্রত্যাহারের বিষয়ে সতর্ক থাকতে হবে।
চ্যালেঞ্জ
প্রয়োজনীয় সংখ্যা এবং নোটগুলি দেওয়া 1000
, কমপক্ষে many অনেকগুলি নোট পেতে প্রয়োজনীয় নির্দিষ্ট প্রত্যাহার গণনা করুন। প্রতিটি প্রত্যাহারে, এটিএম নিম্নলিখিত নিয়মগুলির উপর ভিত্তি করে নোটের প্রতিটিকে থুতু ফেলতে পারে:500
100
- উত্তোলিত পরিমাণ (
A
) এর চেয়ে কম5000
- যদি
A%1000 == 0
তা হয় তবে এটিএম 1 টি500
নোট, 5 টি100
নোট এবং বিশ্রাম1000
নোটকে থুতু দেয় - অন্যথায়
A%500 == 0
, এটিএম 5 টি100
নোট, বাকী1000
নোটগুলিকে স্পিট করে - অন্যথায়
A%1000 < 500
, এটিএমfloor(A/1000)
1000
নোট এবং বাকী100
নোটগুলিকে স্পিট করে - অন্যথায়
A%1000 > 500
, এটিএমfloor(A/1000)
1000
নোট, 1500
এবং বিশিষ্ট100
নোট স্পিট করে
- যদি
- প্রত্যাহারের পরিমাণটি এর সমান থেকে বেশি
5000
- যদি
A%1000 == 0
তা হয় তবে এটিএম 2 টি500
নোট এবং বিশ্রামের1000
নোটগুলিকে স্পিট করে - অন্যথায়, যদি
A%500 == 0
এটিএম 1 টি500
নোট এবং বাকী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
কেসটি কি যুক্তিসঙ্গত সময়ে শেষ করা উচিত?