-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcoins2.cpp
More file actions
46 lines (43 loc) · 1.2 KB
/
coins2.cpp
File metadata and controls
46 lines (43 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <sstream>
#include <iterator>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
template <class I>
void print(I first, I last) {
ostream_iterator<int> oi(cout, " ");
copy(first, last, oi);
cout << endl;
}
struct wave {
int length;
int current;
wave(int l):length(l), current(0) {}
int operator()() { return (current++ % length == 0);}
};
int main() {
cout << "Enter values of different coins:\n";
string strCoins;
getline(cin, strCoins);
stringstream iss(strCoins);
istream_iterator<int> ii(iss);
istream_iterator<int> eos;
vector<int> coins(ii, eos);
sort(coins.begin(), coins.end());
cout << "Enter amount in cents:\n";
int amount;
cin >> amount;
vector<int> genfunc(amount+1);
vector<int>::iterator ci = coins.begin();
generate(genfunc.begin(), genfunc.end(), wave(*ci));
print(genfunc.begin(), genfunc.end());
for (++ci;ci != coins.end(); ++ci) {
transform(genfunc.begin()+(*ci), genfunc.end(), genfunc.begin(),
genfunc.begin()+(*ci), plus<int>());
print(genfunc.begin(), genfunc.end());
}
cout << "There are " << genfunc[amount] << " ways to pay this amount." << endl;
}