輸入金額兌換硬幣沒有問題,但是要將他們比較硬幣數量後依照大小printf出來該如何實現?
比如5圓最多,5圓就優先printf出來
Array index 0~3 依序存50/10/5/1對應的硬幣數量
數量等於零就不輸出
我不知道C的map是不是有序的
如果有的話用map更好
直接存key-value[coin-amount]
遞迴技巧
#include<stdio.h>
void change(int m, int r){
int c = m % r, t = m / r;
if (t > 0)
printf("%d 元 %d 個\n", r, t);
if (c > 0)
change(c, r==50?10:(r==10?5:1));
}
void main(){
int d;
printf("請輸入你的換幣金額:");
scanf("%d", &d);
change(d, 50);
}
C語法不是很清楚
但概念差不多
建立int陣列,int List之類的 存50 10 5 1
在使用Foreach印出
【更新】
發完之後才發現有要以硬幣數最多來排序,這樣做法又不同了,可以改以Dictionary儲存,計算完後再排序,我就不贅述。
//C#
List<int> coins = new List<int> {50,10,5,1} ;
int Total = 546 ;
foreach(int coin in coins)
{
//印出幾圓幾個
Console.WriteLine("{0}圓{1}個", coin, Total/coin );
//兌換後剩餘,換到1一定剩0所以不用跑
if(coin != 1)
Total = Total % coin;
}
以下是不負責任AI機器人幫我轉換成C
#include <stdio.h>
int main() {
int coins[] = {50, 10, 5, 1};
int total = 546;
int i;
for (i = 0; i < sizeof(coins)/sizeof(coins[0]); i++) {
// 印出幾圓幾個
printf("%d圓%d個\n", coins[i], total/coins[i]);
// 兌換後剩餘
if (coins[i] != 1) {
total = total % coins[i];
}
}
return 0;
}