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

โปรแกรม C++ หาปีปฏิทินที่เหมือนกันถัดไป


สมมติว่าเรามีปี Y หาปีปฏิทินที่เหมือนกันถัดไปของ Y ดังนั้นปฏิทินของ 2017 จึงเหมือนกับ 2023

ปี X จะเหมือนกับปี Y ที่ผ่านมา หากตรงตามเงื่อนไขสองข้อนี้:

  • x เริ่มต้นด้วยวันเดียวกับปี y,
  • ถ้า y เป็นปีอธิกสุรทิน x ก็ต้องเป็นปีอธิกสุรทินเช่นกัน ถ้า y เป็นปีปกติ x ก็ต้องเป็นปีปกติเช่นกัน

แนวคิดคือตรวจสอบทุกปีทีละปีจากปีถัดไป เราจะติดตามจำนวนวันที่เลื่อนไปข้างหน้า หากมีรวม 7 วันที่เลื่อนไป ปีปัจจุบันจะเริ่มต้นด้วยวันเดียวกัน เรายังตรวจสอบว่าปีปัจจุบันเป็นปีอธิกสุรทินหรือไม่ ถ้าเป็น ตรวจสอบ y ด้วย หากเงื่อนไขทั้งสองเป็นจริง เราจะคืนค่าปีปัจจุบัน

ตัวอย่างโค้ด C++

#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