d041 - 11219 - How old are you?
題目描述
題目要求根據給定的今天日期和出生日期計算年齡。如果計算出的年齡小於 0 (尚未出生),則輸出 "Invalid birth date"。如果計算出的年齡大於 130,則輸出 "Check birth date"。否則,輸出計算出的年齡。
解題思路
程式碼首先讀取測試案例的數量。對於每個測試案例,程式碼讀取今天的日期和出生日期,它們的格式都是 DD/MM/YYYY。然後,程式碼將日期字串解析為整數,分別提取日、月和年。計算年齡的邏輯是:先比較月和日,如果今天的月和日晚於出生日期,則年齡為今年份減去出生年份。否則,需要將今年份減去出生年份再減 1。最後,程式碼根據年齡的範圍輸出相應的結果。
複雜度分析
- 時間複雜度: O(T),其中 T 是測試案例的數量。因為程式碼需要遍歷每個測試案例,並且每個測試案例的操作都是常數時間。
- 空間複雜度: O(1),程式碼使用的額外空間是常數級別的,例如儲存日期和年齡的變數。
程式碼
#include <iostream>
using namespace std;
string a,b;
int main(){
int t;
cin >> t;
for(int i=1;i<=t;++i){
cin >> a >> b;
int a0=0,a1=0,a2=0,b0=0,b1=0,b2=0;
a0=(a[0]-48)*10+(a[1]-48);
a1=(a[3]-48)*10+(a[4]-48);
a2=(a[6]-48)*1000+(a[7]-48)*100+(a[8]-48)*10+(a[9]-48);
b0=(b[0]-48)*10+(b[1]-48);
b1=(b[3]-48)*10+(b[4]-48);
b2=(b[6]-48)*1000+(b[7]-48)*100+(b[8]-48)*10+(b[9]-48);
if(a1>b1||(a1==b1&&a0>=b0))
++a2;
a2-=b2;
--a2;
cout << "Case #" << i << ": ";
if(a2<0)
cout << "Invalid birth date\n";
else if(a2>130)
cout << "Check birth date\n";
else
cout << a2 << "\n";
}
}