Code:
#include <iostream>
using namespace std;
void ways(int, int [], int [], char [], int, int, int&);
void display(int [], int [], char [], int, int);
int sum(int [], int [], char [], int, int);
void ways(int pos, int value[], int count[], char name[], int coinNumber, int total, int &waysNum)
{
while (sum(value, count, name, coinNumber, total) < total)
{
count[pos]++;
if (sum(value, count, name, coinNumber, total) == total)
{
display(value, count, name, coinNumber, total);
waysNum++;
}
if (pos < coinNumber-1) // pass the next value, unless it's the last value
ways(pos+1, value, count, name, coinNumber, total, waysNum);
}
count[pos] = 0; // clear before moving to next pos
if (pos < coinNumber-1) // pass the next value, unless it's the last value
ways(pos+1, value, count, name, coinNumber, total, waysNum);
} // end ways
void display(int value[], int count[], char name[], int coinNumber, int total)
{
for (int i = 0; i < coinNumber; i++)
cout << count[i] << name[i] << " ";
cout << "= " << sum(value, count, name, coinNumber, total) << endl;
}
int sum(int value[], int count[], char name[], int coinNumber, int total)
{
int sumN = 0;
for (int i = 0; i < coinNumber; i++)
sumN += count[i] * value[i];
return sumN;
}
int main()
{
const int total = 100;
const int coinNumber = 5;
int waysNum = 0;
int value[coinNumber] = {50,25,10,5,1};
int count[coinNumber] = {0,0,0,0,0};
char name[coinNumber] = {'h','q','d','n','p'};
ways(0, value, count, name, coinNumber, total, waysNum);
cout << "There are " << waysNum << " different ways to make change." << endl;
return 0;
}
Bookmarks