c - What's wrong with my code (CS50 2012 Pset 1 greedy) -
i trying make program gives least amount of coins change if give number other divides quarters, fails miserably. example, if input 1.25, 5 quarters if input 1.26, 5 quarters 1 nickel of course incorrect. doing wrong?
#include <stdio.h> #include <cs50.h> #include <math.h> void calculate_change(change_requested){ int num_quarters = 0; int num_dimes = 0; int num_nickles = 0; int num_pennies = 0; int val_quarters = 25; int val_dimes = 10; int val_nickles = 5; num_quarters = floor(change_requested/val_quarters); if(change_requested % val_quarters != 0){ num_dimes = floor( (change_requested - (num_quarters * val_quarters))/val_dimes ); if( change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes))) != 0){ num_nickles = floor( change_requested - ( (num_quarters * val_quarters) + (num_dimes * val_dimes)/val_nickles )); if( change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))) != 0){ for(int = 0; i<change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))); i++){ num_pennies++; } } } } if(num_quarters > 0){ printf("%i quarters ",num_quarters); } if(num_dimes > 0){ printf("%i dimes ",num_dimes); } if(num_nickles > 0){ printf("%i nickles",num_nickles); } if(num_pennies > 0){ printf("%i pennies",num_pennies); } printf("\n"); } int main (void){ printf("how change need?\namount: "); float change_requested = getfloat(); calculate_change(change_requested * 100); return 0; }
i feel overcomplicating this. if need write
for(int = 0; i<change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))); i++){ and in 1 line, wrong. can in simpler way, subtracting value of coins calculated total amount in order to obtain rest:
int vals[] = { 25, 10, 5 }; const char *names[] = { "quarters", "dimes", "nickles" }; int pennies = 100 * getfloat(); // not @ all, btw (*) (int = 0; < 3; i++) { int n = pennies / vals[i]; if (n) { printf("%d %s ", n, names[i]); } pennies -= n * vals[i]; } if (pennies) printf("%d pennies", pennies); printf("\n"); as why getfloat() not good: floating-point numbers aren't exact, so, example, 1.26 may represented 1.25999946. when convert integral value, may lose penny or due truncation if unlucky.
Comments
Post a Comment