Trong bài toán này, chúng ta được cung cấp hai mảng date1 [] và date2 bao gồm 3 số nguyên biểu thị DD-MM-YYYY của daes. Nhiệm vụ của chúng ta là tìm số ngày giữa hai ngày nhất định.
Hãy lấy một ví dụ để hiểu vấn đề,
Đầu vào
date1[] = {13, 3, 2021}, date2[] = {24, 5, 2023}
Đầu ra
802
Giải thích
Chênh lệch là 2 năm, 2 tháng (3 - 5) và 11 ngày.
2*356 + (30 + 31) + 11 = 802
Phương pháp tiếp cận giải pháp
Một giải pháp đơn giản cho vấn đề là lặp lại, bắt đầu từ ngày bắt đầu date1 đến date2 đếm số ngày. Và trả về giá trị. Cách tiếp cận này không sao cả, nhưng có thể có một cách tiếp cận hiệu quả hơn.
Phương pháp tiếp cận hiệu quả
Một cách tiếp cận hiệu quả hơn cho vấn đề là đếm tổng số ngày cho đến cả ngày date1 [] và date2 []. Và sau đó sự khác biệt tuyệt đối giữa cả hai cho kết quả.
Để đếm số ngày cho đến cả hai ngày1 [] từ 01/01/0000.
NĂM
Số ngày cho đến ngày đầu tiên của năm1 [2]
Number of days = 365*(years) + no. of leap year
THÁNG
Trong một số ngày cho đến ngày đầu tiên của tháng. Đếm từ mảng tháng.
Number of days = monthDays[date[1]].
monthDays sẽ lưu trữ tổng số ngày cho đến ngày đầu tiên của tháng.
NGÀY
Số ngày.
Tổng của tất cả những thứ này cho biết số ngày tính đến ngày date1 []. Sự khác biệt giữa các lần đếm là kết quả.
Chương trình minh họa hoạt động của giải pháp của chúng tôi,
Ví dụ
#include <iostream> #include <math.h> using namespace std; const int monthDays[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; int countLeapYearDays(int d[]){ int years = d[2]; if (d[1] <= 2) years--; return ( (years / 4) - (years / 100) + (years / 400) ); } int countNoOfDays(int date1[], int date2[]){ long int dayCount1 = (date1[2] * 365); dayCount1 += monthDays[date1[1]]; dayCount1 += date1[0]; dayCount1 += countLeapYearDays(date1); long int dayCount2 = (date2[2] * 365); dayCount2 += monthDays[date2[1]]; dayCount2 += date2[0]; dayCount2 += countLeapYearDays(date2); return ( abs(dayCount1 - dayCount2) ); } int main(){ int date1[3] = {13, 3, 2021}; int date2[3] = {24, 5, 2023}; cout<<"The number of days between two dates is "<<countNoOfDays(date1, date2); return 0; }
Đầu ra
The number of days between two dates is 802