日期:2026年3月29日
ZeroJudge 題目連結:d041. 11219 - How old are you?
解題想法
用自訂函式計算年齡,如果今天的日、月、年分別為 $dt, mt, yt$,生日的日、月、年分別為 $db, mb, yb$,先假設年齡 $age = yt - yb$,接下來再依照 $(mt, dt), (mb, db)$ 修正 $age$ 的值,如果 $mt < mb$ 或是 $mt = mb, dt < db$,則 $age$ 減 1。
Python 程式碼
使用時間約為 7 ms,記憶體約為 2.8 MB,通過測試。
def cal_age(today, birthday):
dt, mt, yt = map(int, today.split('/'))
db, mb, yb = map(int, birthday.split('/'))
age = yt - yb
#if (mt, dt) < (mb, db): age -= 1 # 第5、6行效果相同
if mt < mb or (mt == mb and dt < db): age -= 1
if age < 0: return "Invalid birth date"
if age > 130: return "Check birth date"
return str(age)
T = int(input())
for t in range(1, T+1):
_ = input()
ans = cal_age(input(), input())
print(f"Case #{t:d}: {ans:s}")
C++ 程式碼
使用時間約為 0 ms,記憶體約為 68 kB,通過測試。
#include <cstdio>
int cal_age(int dt, int mt, int yt, int db, int mb, int yb) {
int age = yt - yb;
if (mt < mb || (mt == mb && dt < db)) age--;
if (age < 0) return -1; // Invalid birth date
if (age > 130) return 131; // Check birth date
return age;
}
int main() {
int T, dt, mt, yt, db, mb, yb, age;
scanf("%d", &T);
for(int t=1; t<=T; t++) {
printf("Case #%d: ", t);
scanf("%d/%d/%d %d/%d/%d", &dt, &mt, &yt, &db, &mb, &yb);
age = cal_age(dt, mt, yt, db, mb, yb);
if (age < 0) puts("Invalid birth date");
else if (age == 131) puts("Check birth date");
else printf("%d\n", age);
}
return 0;
}
沒有留言:
張貼留言