Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาปีปฏิทินที่เหมือนกันถัดไปใน C++


สมมติว่าเรามีปี 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