日期: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;
}
沒有留言:
張貼留言