2025年2月19日 星期三

ZeroJudge 解題筆記:e972. 1. 貨幣轉換 (Currency)

作者:王一哲
日期:2025年2月19日



ZeroJudge 題目連結:e972. 1. 貨幣轉換 (Currency)

解題想法


這題的第三筆測資是用 \r 換行,用 Python 解題反而很麻煩。

Python 程式碼


因為第3筆測資是用 \r 分隔資料,這樣寫過不了。
import re
ori = int(input())  # 原有的金額
rem = 0  # 剩下的金額
data = re.split(r"\s+", input())
cost = int(data[0])
if data[1] == 'T': rem = ori - cost  # 台幣
elif data[1] == 'U': rem = ori / 30.9 - cost  # 美金
elif data[1] == 'J': rem = ori / 0.28 - cost  # 日幣
elif data[1] == 'E': rem = ori / 34.5 - cost  # 歐元
if 0 < rem < 0.05: rem = 0.00  # 若 rem 為正數且小於 0.05,改成 0.00 
if rem < 0: print("No Money")  # 如果 rem 小於 0,印出 No Money
else: print(f"{data[1]:s} {rem:.2f}")  # 剩出幣制及餘額


改成這樣才能通過。使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
data = input().replace('\r', ' ')  # 將 \r 換成空格
try:
    n = input()
except:  # 為了處理第 3 筆測資,\r 會使游標在換行後移到上一行
    data, a, b = data.split()  # 目的地幣值 b
else:
    a, b = n.split()
    
ori = int(data)  # 原有的金額
cost = int(a)  # 花費
rem = 0  # 剩下的金額

if b == 'T': rem = ori - cost  # 台幣
elif b == 'U': rem = ori / 30.9 - cost  # 美金
elif b == 'J': rem = ori / 0.28 - cost  # 日幣
elif b == 'E': rem = ori / 34.5 - cost  # 歐元
if 0 < rem < 0.05: rem = 0.00  # 若 rem 為正數且小於 0.05,改成 0.00 
if rem < 0: print("No Money")  # 如果 rem 小於 0,印出 No Money
else: print(f"{b:s} {rem:.2f}")  # 剩出幣制及餘額


C++ 程式碼


如果計算剩下的金額時使用 float,則在測試時有 3 筆日幣的測資無法通過,改成 double 才能通過。使用時間約為 2 ms,記憶體約為 100 kB,通過測試。
#include <cstdio>
using namespace std;

int main() {
    int ori; scanf("%d", &ori);  // 原有的金額
    double rem = 0.0;  // 剩下的金額
    int cost; char t; scanf("%d %c", &cost, &t);  // 花費,目的地貨幣種類
    if (t == 'T') rem = ori - cost;  // 台幣
    else if (t == 'U') rem = double(ori) / 30.9 - double(cost);  // 美金
    else if (t == 'J') rem = double(ori) / 0.28 - double(cost);  // 日幣
    else if (t == 'E') rem = double(ori) / 34.5 - double(cost);  // 歐元
    if (rem > 0 && rem < 0.05) rem = 0.00;  // 若 rem 為正數且小於 0.05,改成 0.00 
    if (rem < 0) printf("No Money\n");  // 如果 rem 小於 0,印出 No Money
    else printf("%c %.2f\n", t, rem);  // 剩出幣制及餘額
    return 0;
}


沒有留言:

張貼留言