[討論] 換零錢程式

看板C_and_CPP (C/C++)作者 (好時光)時間15年前 (2011/04/06 13:59), 編輯推噓6(6014)
留言20則, 6人參與, 最新討論串1/1
問題:寫出一模擬換零錢程式 (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

04/06 14:06, , 1F
讓我想到VERILOG的自動販賣機......
04/06 14:06, 1F

04/06 14:09, , 2F
先把排版排好吧
04/06 14:09, 2F

04/06 14:23, , 3F
100換10個1 應該是 10個1 4個10 1個50 XD
04/06 14:23, 3F

04/07 02:37, , 4F
關於使用 「最少零錢數目找錢」 的部分:
04/07 02:37, 4F

04/07 02:37, , 5F
1. 可以使用 Greedy Method 找 近似解。
04/07 02:37, 5F

04/07 02:38, , 6F
2. 可以使用 Dynamic Programming 找 最佳解(假如存在)
04/07 02:38, 6F

04/07 02:39, , 7F
目前瀏覽過您的程式碼,其精神類似Greedy Method。
04/07 02:39, 7F

04/07 02:39, , 8F
可嘗試用 Dynamic Programming 改寫看看。
04/07 02:39, 8F

04/07 02:40, , 9F
04/07 02:40, 9F

04/07 02:40, , 10F
參考文章: http://0rz.tw/rWqLz
04/07 02:40, 10F

04/07 02:44, , 11F
04/07 02:44, 11F

04/07 02:44, , 12F
04/07 02:44, 12F

04/07 02:45, , 13F
搜尋關鍵字: Money-Changing Problem
04/07 02:45, 13F

04/07 03:09, , 14F
04/07 03:09, 14F

04/07 03:09, , 15F
小弟對於 Money-Changing Problem 的練習:
04/07 03:09, 15F

04/07 03:10, , 16F
04/07 03:10, 16F

04/07 03:10, , 17F
還請大家多多給予指導,小弟在此先向大家說聲謝謝! : )
04/07 03:10, 17F

04/07 09:47, , 18F
樓上 我記得我沒有那樣寫啊
04/07 09:47, 18F

04/07 09:48, , 19F
這種幣值組合 用greedy method 就可以了啦
04/07 09:48, 19F

04/07 18:11, , 20F
文章代碼(AID): #1Dd056B_ (C_and_CPP)
文章代碼(AID): #1Dd056B_ (C_and_CPP)