Giả sử có năm Y. Tìm năm lịch giống hệt năm tiếp theo của Y. Vì vậy lịch của 2017 giống với 2023.
Một năm X giống năm Y trước đó nếu thỏa mãn hai điều kiện:
- x bắt đầu cùng ngày trong tuần với năm y,
- Nếu y là năm nhuận thì x cũng nhuận, nếu y là năm thường thì x cũng năm thường.
Ý tưởng là kiểm tra từng năm từ năm tiếp theo. Theo dõi số ngày dịch chuyển. Nếu tổng 7 ngày dịch chuyển, năm hiện tại bắt đầu cùng ngày. Cũng kiểm tra năm hiện tại có nhuận không, nếu có thì cũng kiểm tra y. Nếu cả hai điều kiện thỏa mãn, trả về năm hiện tại.
Ví dụ mã nguồn
#include<iostream> using namespace std; int countExtraDays(int y) { if (y%400==0 || y%100!=0 && y%4==0) return 2; return 1; } int nextIdenticalYear(int y) { int days = countExtraDays(y); int x = y + 1; for (int sum=0; ; x++) { sum = (sum + countExtraDays(x)) % 7; if ( sum==0 && (countExtraDays(x) == days)) return x; } return x; } int main() { int curr = 2019; cout << "Next identical year of " << curr <<" is: " << nextIdenticalYear(curr); } Kết quả
Next identical year of 2019 is: 2030