C語言找零問題
阿新 • • 發佈:2019-02-03
1.找零問題
錢的面值有1毛,5毛,1塊,5塊,10塊,20塊,50塊,100塊,大於100的就不算找零了,用貪心演算法來找零,使得每次找零的錢的張數和最小
2.程式碼:
#include <stdlib.h> #include <stdio.h> void change(double money, double pay) { int count[7] = {0}; //個個面值錢的張數 double change= money - pay;//找零的錢 while (change > 0) { if (change >= 500) { change = change - 500; count[6] ++; } if (change>=200&&change<500) { change = change -200; count[5] ++; } if (change >= 100 && change < 200) { change = change - 100; count[4] ++; } if (change >= 50 && change < 100) { change = change - 50; count[3] ++; } if (change >= 10 && change < 50) { change = change - 10; count[2] ++; } if (change >= 5&&change < 10) { change = change - 5; count[1]++; } if (change < 5) { change = change - 1; count[0]++; } } //列印陣列 for (int i = 0; i < 7; i++) { printf("%d\t", count[i]); } printf("\n"); } int main() { printf("找零:找零1毛,5毛,1塊,5塊,10塊,20塊,50塊的零錢,大於100不算零錢了\n"); double money = 100; double pay = 14.6; printf("給了%.1f,花費%.1f\n", money, pay); printf("輸出相應零錢的張數:\n"); money = money * 10; //因為double的精度不到0.1所以把錢面值擴大10倍 pay = pay * 10; printf("0.1 0.5 1 5 10 20 50 \n"); change(money, pay); system("pause"); return 0; }
3.執行結果: