Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm năm dương lịch tiếp theo giống hệt nhau trong C ++

Giả sử chúng ta có một năm Y. Tìm năm dương lịch tiếp theo trùng với Y. Vậy lịch của năm 2017 trùng với năm 2023.

Một năm X giống với năm Y trước đó nếu nó phù hợp với hai điều kiện này.

  • x bắt đầu cùng ngày với năm,
  • Nếu y là năm nhuận thì x cũng là năm, nếu y là năm bình thường thì x cũng là năm bình thường.

Ý tưởng là kiểm tra tất cả các năm lần lượt từ năm sau. Chúng tôi sẽ theo dõi số ngày đã chuyển trước. Nếu có tổng cộng 7 ngày chuyển đi, thì năm hiện tại bắt đầu bằng ngày đó. Chúng tôi cũng kiểm tra xem năm hiện tại có phải là năm nhuận hay không, nếu có thì cũng kiểm tra y. Nếu cả hai điều kiện được thỏa mãn, chúng tôi trả về năm hiện tại.

Ví dụ

#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);
}

Đầu ra

Next identical year of 2019 is: 2030