#include <iostream>
#include <vector>
#include <algorithm>
int main( )
{
std:: cout << "Enter the value N to produce:\n " ;
int N;
std:: cin >> N;
std:: cout << "Enter the number of different denominations:\n " ;
size_t denomCount;
std:: cin >> denomCount;
std:: vector < int > denominations( denomCount) ;
for ( size_t i = 0 ; i < denomCount; ++ i) {
std:: cout << "Enter denomination #" << ( i + 1 ) << ":\n " ;
std:: cin >> denominations[ i] ;
}
// sort into descending order.
std:: sort ( denominations.begin ( ) , denominations.end ( ) ,
[ ] ( int lhs, int rhs) { return lhs > rhs; } ) ;
// if the lowest denom isn't 1... add 1.
if ( denominations.back ( ) ! = 1 )
denominations.push_back ( 1 ) ;
for ( int coin: denominations) {
int numCoins = N / coin;
N % = coin;
if ( numCoins > 0 )
std:: cout << numCoins << " x " << coin << '\n ' ;
}
return 0 ;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDx2ZWN0b3I+CgkjaW5jbHVkZSA8YWxnb3JpdGhtPgoKCWludCBtYWluKCkKCXsKCQlzdGQ6OmNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBOIHRvIHByb2R1Y2U6XG4iOwoJCWludCBOOwoJCXN0ZDo6Y2luID4+IE47CgoJCXN0ZDo6Y291dCA8PCAiRW50ZXIgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgZGVub21pbmF0aW9uczpcbiI7CgkJc2l6ZV90IGRlbm9tQ291bnQ7CgkJc3RkOjpjaW4gPj4gZGVub21Db3VudDsKCgkJc3RkOjp2ZWN0b3I8aW50PiBkZW5vbWluYXRpb25zKGRlbm9tQ291bnQpOwoJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVub21Db3VudDsgKytpKSB7CgkJCXN0ZDo6Y291dCA8PCAiRW50ZXIgZGVub21pbmF0aW9uICMiIDw8IChpICsgMSkgPDwgIjpcbiI7CgkJCXN0ZDo6Y2luID4+IGRlbm9taW5hdGlvbnNbaV07CgkJfQoKCQkvLyBzb3J0IGludG8gZGVzY2VuZGluZyBvcmRlci4KCQlzdGQ6OnNvcnQoZGVub21pbmF0aW9ucy5iZWdpbigpLCBkZW5vbWluYXRpb25zLmVuZCgpLAoJCQlbXShpbnQgbGhzLCBpbnQgcmhzKSB7IHJldHVybiBsaHMgPiByaHM7IH0pOwoKCQkvLyBpZiB0aGUgbG93ZXN0IGRlbm9tIGlzbid0IDEuLi4gYWRkIDEuCgkJaWYgKGRlbm9taW5hdGlvbnMuYmFjaygpICE9IDEpCgkJCWRlbm9taW5hdGlvbnMucHVzaF9iYWNrKDEpOwoKCQlmb3IgKGludCBjb2luOiBkZW5vbWluYXRpb25zKSB7CgkJCWludCBudW1Db2lucyA9IE4gLyBjb2luOwoJCQlOICU9IGNvaW47CgkJCWlmIChudW1Db2lucyA+IDApCgkJCQlzdGQ6OmNvdXQgPDwgbnVtQ29pbnMgPDwgIiB4ICIgPDwgY29pbiA8PCAnXG4nOwoJCX0KCgkgICAgcmV0dXJuIDA7Cgl9