日期:2025年5月6日
ZeroJudge 題目連結:k847. P1.租車費用 (Rent)
解題想法
按照題目的計費規則寫就行了,先算租車天數,分成每租滿 10 天以及未滿 10 天兩個部分計費。
Python 程式碼
使用時間約為 39 ms,記憶體約為 3.3 MB,通過測試。
import sys
month = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
for line in sys.stdin:
m1, d1 = map(int, line.split()) # 第一天月、日
m2, d2 = map(int, input().split()) # 第二天月、日
# 租車天數,先計算月份,減去 m1 月份在 d1 之前的天數,加上 m2 月份的天數,頭尾都要算天數,再加 1
days = sum(month[m1: m2]) - d1 + d2 + 1
fee = (days//10) * 900 # 每租滿10天算900元
fee += (days%10) * 100 # 未滿10天的部分每天100元
print(fee)
月份的天數改成前綴和,如果輸入的月份是 $m1, m2$,要算計算 $m2-1$ 到 $m1$ 月份的天數 $psum[m2-1] - psum[m1-1]$。使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
import sys
psum = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365)
for line in sys.stdin:
m1, d1 = map(int, line.split()) # 第一天月、日
m2, d2 = map(int, input().split()) # 第二天月、日
# 租車天數,先計算月份,減去 m1 月份在 d1 之前的天數,加上 m2 月份的天數,頭尾都要算天數,再加 1
days = psum[m2-1] - psum[m1-1] - d1 + d2 + 1
fee = (days//10) * 900 # 每租滿10天算900元
fee += (days%10) * 100 # 未滿10天的部分每天100元
print(fee)
C++ 程式碼
使用時間約為 2 ms,記憶體約為 100 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m1, d1; // 第一天月、日
while(scanf("%d %d", &m1, &d1) != EOF) {
int m2, d2; scanf("%d %d", &m2, &d2); // 第二天月、日
// 租車天數,先計算月份,減去 m1 月份在 d1 之前的天數,加上 m2 月份的天數,頭尾都要算天數,再加 1
int days = -d1 + d2 + 1;
for(int i=m1; i<m2; i++) days += month[i];
int fee = (days/10) * 900; // 每租滿10天算900元
fee += (days%10) * 100; // 未滿10天的部分每天100元
printf("%d\n", fee);
}
return 0;
}
月份的天數改成前綴和,如果輸入的月份是 $m1, m2$,要算計算 $m2-1$ 到 $m1$ 月份的天數 $psum[m2-1] - psum[m1-1]$。使用時間約為 2 ms,記憶體約為 88 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int psum[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
int m1, d1; // 第一天月、日
while(scanf("%d %d", &m1, &d1) != EOF) {
int m2, d2; scanf("%d %d", &m2, &d2); // 第二天月、日
// 租車天數,先計算月份,減去 m1 月份在 d1 之前的天數,加上 m2 月份的天數,頭尾都要算天數,再加 1
int days = psum[m2-1] - psum[m1-1] - d1 + d2 + 1;
int fee = (days/10) * 900; // 每租滿10天算900元
fee += (days%10) * 100; // 未滿10天的部分每天100元
printf("%d\n", fee);
}
return 0;
}
沒有留言:
張貼留言