🟢 Մանրադրամի վերադարձ

Գրենք ծրագիր, որը կօգնի վաճառողին վերադարձնել մանրադրամը հաճախորդներին։ Մանրադրամը վերադարձնելիս մենք ցանկանում ենք տրամադրել հնարավորինս քիչ քանակի մետաղադրամներ։ Դա մեզ թույլ կտա մի կողմից խնայել վաճառողի մոտ եղած մետաղադրամների քանակը, մյուս կողմից չզայրացնել հաճախորդներին մեծ քանակի մանրադրամներով։ Նույն սկզբունքով են մանր վերադարձնում նաև տարատեսակ վճարային տերմինալներն ու բանկոմատները։
Խնդիրը չծանրաբեռնելու համար ենթադրենք, որ հասանելի են 10, 20, 50 և 100 դրամանոց մետաղադրամներ։ Նաև ենթադրենք, որ 10 դրամից քիչ գումարը անտեսվում է։
notion image
Այս խնդիրը հնարավոր է լուծել կիրառելով այսպես կոչված ագահ ալգորիթմ (greedy algorithm), այն է ամեն քայլում մենք կարող ենք <<ագահաբար>> ընտրել ամենամեծ հնարավոր մետաղադրամը։
Օրինակ, 170 դրամ վերդարձնելու համար մենք կընտրենք ամենամեծ հնարավոր մետաղադրամը՝ 100 դրամ։ Այս քայլից հետո մեզ կմնա վերադարձնելու 70 դրամ։ Այսինքն, մեզ հարկավոր է լուծել նույն խնդիրը արդեն ավելի փոքր գումարի` 70 դրամի համար։ Երկրորդ քայլում ամենամեծ հնարավոր մետաղադրամը, որ կարող ենք ընտրել դա 50 դրամն է։ Վերջին քայլում կընտրենք 20 դրամանոց մետաղադրամը։ Արդյունքում մենք կվերադարձնենք հաճախորդին թվով 3 մետաղադրամ։
Ագահ ալգորիթմները խնդրի լուծման ամեն քայլում ընտրում են հնարավոր լավագույն միջանկյալ լուծումը։ Ոչ բոլոր դեպքերում է, որ ագահ ալգորիթմները գտնում են խնդրի գլոբալ օպտիմալ լուծումը։ Սակայն, այս խնդրի համար վերևում նկարագրած ալգորիթմի գտած լուծումը միշտ վերադարձնում է մետաղադրամների հնարավոր մինիմալ քանակը։
🤖
Դե ինչ, ժամանակն է գրել ծրագիր, որը ներմուծված գումարի համար կվերադարձնի այդ գումարը մանրելու համար հնարավոր մինիմալ մետաղադրամների քանակը։
Ծրագիրը նախ էկրանին պետք է տպի Change: տողը, և սպասի որպեսզի օգտագործողը ներմուծի թիվ։ Ինչպես նախորդ խնդիրներում, եթե օգտագործողը ներմուծել է ոչ վալիդ տվյալ (բացասական թիվ), ապա ծրագիրը պետք է նորից խնդրի օգտագործողին ներմուծել թիվ, այնքան ժամանակ, քանի դեռ օգտագործողը չի ներմուծել վալիդ արժեք։
./cash
Change: -1
Change: 10
1
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue