Alright, I took the advice and the program is now up to Fifty cent pieces and working correctly. It is outputting the correct variations ($.025 - 13, $.50 - 50, etc). Thanks again for the help. Here is the final code up to .50 cent pieces:
Code:
#include<iostream>
#include<iomanip>
using namespace std;
void change (double);
void changeNumbers (double);
int main()
{
double money;
char answer;
do
{
//Get money value and validate.
do
{
cout << "Enter the value to be changed: $";
cin >> money;
} while (money < 0);
//Run most effecient change function
change (money);
//Run number of change variations function
if (money <= 10.00)
changeNumbers (money);
cout << "Would you like to run this program again (Y/N)?";
cin >> answer;
cout << endl;
} while (answer == 'y' || answer == 'Y');
system("pause.exe");
return 0;
}
void change (double money)
{
int fifties, hundreds, twenties, fives, ones, twos, tens;
int fiftycents, quarters, dimes, nickels, pennies;
double value; //To display original movey value again
value = money;
//Make calculations for change
money*= 100;
hundreds = money / 10000;
money = money - (10000 * hundreds);
fifties = money / 5000;
money = money - (5000 * fifties);
twenties = money / 2000;
money = money - (2000 * twenties);
tens = money / 1000;
money = money - (1000 * tens);
fives = money / 500;
money = money - (500 * fives);
twos = money / 200;
money = money - (200 * twos);
ones = money / 100;
money = money - (100 * ones);
fiftycents = money / 50;
money = money - (50 * fiftycents);
quarters = money / 25;
money = money - (25 * quarters);
dimes = money / 10;
money = money - (10 * dimes);
nickels = money / 5;
money = money - (5 * nickels);
pennies = money / 1;
money = money - (1 * pennies);
//Display denominations with values
cout << endl;
cout << "The most effecient way to make $"
<< fixed << setprecision (2) << value << " is:" << endl << endl;
if (hundreds != 0)
cout << left << setw(20) << "Hundreds: " << hundreds << endl;
if (fifties != 0)
cout << left << setw(20) << "Fifties: " << fifties << endl;
if (twenties != 0)
cout << left << setw(20) << "Twenties: " << twenties << endl;
if (tens != 0)
cout << left << setw(20) << "Tens: " << tens << endl;
if (fives != 0)
cout << left << setw(20) << "Fives: " << fives << endl;
if (twos != 0)
cout << left << setw(20) << "Twos: " << twos << endl;
if (ones != 0)
cout << left << setw(20) << "Ones: " << ones << endl;
cout << endl;
if (fiftycents != 0)
cout << left << setw(20) << "Fifty Cent Pieces: " << fiftycents << endl;
if (quarters != 0)
cout << left << setw(20) << "Quarters: " << quarters << endl;
if (dimes != 0)
cout << left << setw(20) << "Dimes: " << dimes << endl;
if (nickels != 0)
cout << left << setw(20) << "Nickels: " << nickels << endl;
if (pennies != 0)
cout << left << setw(20) << "Pennies: " << pennies << endl;
cout << endl;
}
void changeNumbers (double money)
{
int variations = 1, fives, ones, twos, tens;
int fiftycents = 0, quarters = 0, dimes = 0, nickels = 0, pennies;
pennies = money * 100;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
for (; nickels >= 2 ; variations++)
{
dimes++;
nickels -= 2;
pennies = nickels*5;
nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
}
for ( ; (dimes == 2 && nickels == 1) || dimes >=3 ; variations++)
{
quarters++;
dimes -=2;
nickels -=1;
pennies = (dimes * 10);
pennies += (nickels *5);
dimes = 0;
nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
for (; nickels >= 2 ; variations++)
{
dimes++;
nickels -= 2;
pennies = nickels*5;
nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
}
}
for (; quarters >= 2; variations++)
{
fiftycents++;
quarters -=2;
pennies += (quarters*25);
pennies += (dimes * 10);
pennies += (nickels *5);
quarters = dimes = nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
for (; nickels >= 2 ; variations++)
{
dimes++;
nickels -= 2;
pennies = nickels*5;
nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
}
for ( ; dimes >=2 && nickels > 0 ; variations++)
{
quarters++;
dimes -=2;
nickels -=1;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
for (; nickels >= 2 ; variations++)
{
dimes++;
nickels -= 2;
pennies = nickels*5;
nickels = 0;
for (; pennies >= 5 ; variations++, nickels++, pennies -= 5);
}
}
}
cout << "There is/are " << variations << " way(s) to make change for $";
cout << fixed << setprecision (2) << money << endl << endl;
}
(maybe a little much for an Intro to Programming class?)