看板 C_and_CPP 關於我們 聯絡資訊
問題:寫出一模擬換零錢程式 (1)只接受紙鈔(100,200,500,1000元) (2)可選擇零錢面額(1元,5元,10元,50元)及個數 (3)剩下金額以最少的零錢數找出(假設要以100元換10個一元, 結果會出來10個一元以及9個十元) 程式: #include<stdio.h> #include<stdlib.h> void cash(int); void charge(int ,int,int,int); int main(void){ int money; printf("input money style(1)100 (2)200 (3)500 (4)1000\n");//輸入金額 scanf("%d",&money); cash(money); return 0; } void cash(int money){ int x,y,change; if (money<1 || money>4)//輸入金額模式 printf("only accept banknote\n"); else{ printf("please chose change money\n");//換錢模式 printf("(1)一元(2)五元(3)十元(4)五十元\n"); scanf("%d",&x); if (x<1 || x>4){ printf("請輸入正確幣值\n");//超過金額重新輸入 cash(money); }else { printf("what several do u want\n"); scanf("%d",&y);//y為換幾枚 switch(x){ case 1: change=1*y; break; case 2: change=5*y; break; case 3: change=10*y; break; case 4: change=50*y; break; } printf("換了%d元%d枚",change/y,y); charge(x,y,money,change); } } } void charge(int x,int y,int money,int change){ int z,one,five,ten; switch (money) { case 1: money=100; break; case 2: money=200; break; case 3: money=500; break; case 4: money=1000; break; } z=money-change; ten=(z-z%10); five=(z-ten)-((z-ten)%5); one=(z-ten)%5; printf("共找你%d元\n",z); printf("十元%d枚,五元%d枚,一元%d枚\n",ten/10,five/5,one); } 上面程式為我自己寫的 (1)不知道是否有更精簡或更高級的寫法 (2)不知程式是否有bug 請指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.101.8.91
jason12308:讓我想到VERILOG的自動販賣機...... 04/06 14:06
tkcn:先把排版排好吧 04/06 14:09
otira:100換10個1 應該是 10個1 4個10 1個50 XD 04/06 14:23
attomahawk:關於使用 「最少零錢數目找錢」 的部分: 04/07 02:37
attomahawk:1. 可以使用 Greedy Method 找 近似解。 04/07 02:37
attomahawk:2. 可以使用 Dynamic Programming 找 最佳解(假如存在) 04/07 02:38
attomahawk:目前瀏覽過您的程式碼,其精神類似Greedy Method。 04/07 02:39
attomahawk:可嘗試用 Dynamic Programming 改寫看看。 04/07 02:39
attomahawk: 04/07 02:40
attomahawk:參考文章: http://0rz.tw/rWqLz 04/07 02:40
attomahawk: http://0rz.tw/2uhRr 04/07 02:44
attomahawk: 04/07 02:44
attomahawk:搜尋關鍵字: Money-Changing Problem 04/07 02:45
attomahawk: 04/07 03:09
attomahawk:小弟對於 Money-Changing Problem 的練習: 04/07 03:09
attomahawk: http://0rz.tw/LPnA4 04/07 03:10
attomahawk:還請大家多多給予指導,小弟在此先向大家說聲謝謝! : ) 04/07 03:10
DJWS:樓上 我記得我沒有那樣寫啊 04/07 09:47
DJWS:這種幣值組合 用greedy method 就可以了啦 04/07 09:48
amulet5566:http://songshuhui.net/archives/49079 04/07 18:11