熱門文章

2026年3月29日 星期日

ZeroJudge 解題筆記:d041. 11219 - How old are you?

作者:王一哲
日期: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;
}


沒有留言:

張貼留言