iT邦幫忙

0

C語言兌換硬幣問題

uby 2023-04-10 12:41:171337 瀏覽
  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20230410/20159410nAFUr4tvoc.jpg

輸入金額兌換硬幣沒有問題,但是要將他們比較硬幣數量後依照大小printf出來該如何實現?
比如5圓最多,5圓就優先printf出來

淺水員 iT邦大師 6 級 ‧ 2023-04-10 15:29:45 檢舉
你可以在紙上先試一下 546 元要怎麼用數學式算出 10 個 50 元、4 個 10 元…
再用相同的方式轉成程式碼就可以了
uby iT邦新手 5 級 ‧ 2023-04-10 15:45:05 檢舉
計算和存變數是這樣
int money, coins[4] = {0};
printf("請輸入您的換幣金額: ");
scanf("%d",&money);

coins[0] = money/50;
money%=50;
coins[1] = money/10;
money%=10;
coins[2] = money/5;
money%=5;
coins[3] = money/1;
money%=1;
但輸出就不知道怎麼做
目前單元只使用while跟if 只用這兩個能做到嗎
輸入48, 輸出下面這樣
10圓4個
1圓3個
5圓1個
50圓0個
淺水員 iT邦大師 6 級 ‧ 2023-04-10 23:07:06 檢舉
既然算完了,那輸出

printf("50圓%d個\n", coins[0]);
printf("10圓%d個\n", coins[1]);
printf("5圓%d個\n", coins[2]);
printf("1圓%d個\n", coins[3]);
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
whitefloor
iT邦研究生 2 級 ‧ 2023-04-10 13:33:41

Array index 0~3 依序存50/10/5/1對應的硬幣數量
數量等於零就不輸出

我不知道C的map是不是有序的
如果有的話用map更好
直接存key-value[coin-amount]

2
wiseguy
iT邦超人 1 級 ‧ 2023-04-11 00:45:54

遞迴技巧

#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);
}
0
緯大啊緯大人
iT邦研究生 1 級 ‧ 2023-04-12 09:18:05

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;
}

我要發表回答

立即登入回答