สมมติว่าเรามีปี Y. ค้นหาปีปฏิทินถัดไปที่เหมือนกันกับ Y ดังนั้นปฏิทินปี 2017 ก็เหมือนกับปี 2023
ปี X จะเหมือนกับปีที่แล้ว Y หากตรงกับเงื่อนไขสองข้อนี้
- x เริ่มต้นด้วยวันเดียวกับปี
- หาก y เป็นปีอธิกสุรทิน ดังนั้น x ก็เช่นกัน หาก y เป็นปีปกติ x ก็จะเป็นปีปกติด้วย
แนวคิดคือการตรวจสอบทุกปีจากปีหน้า เราจะติดตามจำนวนวันที่ก้าวไปข้างหน้า หากมีการย้ายทั้งหมด 7 วัน ปีปัจจุบันจะเริ่มต้นด้วยวันเดียวกัน นอกจากนี้เรายังตรวจสอบว่าปีปัจจุบันเป็นปีอธิกสุรทินหรือไม่ ถ้าใช่ ให้ตรวจสอบหา y ด้วย หากเป็นไปตามเงื่อนไขทั้งสอง เราจะคืนปีปัจจุบัน
ตัวอย่าง
#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); }
ผลลัพธ์
Next identical year of 2019 is: 2030