// program to make change in pennies, nickels, dimes // 10/7/07 Cliff Stein #include #define INFTY 100000 int min2(int x, int y) { if (x <= y) return x; return y; } int min3(int x, int y, int z) { if ( (x <= y) && (x <= z) ) return x; if ( (y < x) && (y < z)) return y; else return z; } int change(n) { if (n < 0) return INFTY; else if (n == 0) return 0; else return 1 + min3( change(n-1), change(n-5), change(n-10)); } int dpchange(int n) { int C[1000]; int i,j; C[0] = 0; for (i=1; i<= n; i++) { if (i < 5) C[i] = 1+ C[i-1]; else if (i < 10) C[i] = 1 + min2(C[i-1],C[i-5]); else C[i] = 1 + min3(C[i-1],C[i-5],C[i-10]); } return C[n]; } main() { int n; printf("enter n - We will make change \n"); scanf("%d", &n); printf("\n \nHit a key to begin the dynamic programming computation"); getchar();getchar(); printf("\n\n Number of coins needed is %d\n",dpchange(n)); printf("\n \nHit a key to begin the recursive computation"); getchar(); printf("\n\n Number of coins needed is %d\n",change(n)); }