Cho ngày, tháng, năm. Tìm ngày trong tuần của ngày đó. Sử dụng thuật toán Zeller.
Công thức Zeller
$$w = \left( d + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + y + \left\lfloor\frac{y}{4}\right\rfloor + \left\lfloor\frac{c}{4}\right\rfloor + 5c \right) \bmod 7$$
Các biến
- d - Ngày trong tháng
- m - Mã tháng: 3-12 cho Tháng 3-12, 13 cho Tháng 1, 14 cho Tháng 2. Nếu tháng 1 hoặc 2 thì năm giảm 1
- y - 2 chữ số cuối năm
- c - 2 chữ số đầu năm
- w - Ngày trong tuần: 0=Thứ 7, 1=CN, 2=Thứ 2, ..., 6=Thứ 6
Ví dụ: 4/1/1997 → "Saturday"
Thuật toán
zellersAlgorithm(day, month, year):
if month > 2: mon = month
else: mon = 12 + month; year--
y = year % 100
c = year / 100
w = day + floor(13*(mon+1)/5) + y + floor(y/4) + floor(c/4) + 5*c
w = w % 7
return weekday[w] // weekday = {"Saturday","Sunday",...,"Friday"}
Chương trình C++
#include <iostream>
#include <cmath>
using namespace std;
string weekday[7] = {"Saturday","Sunday","Monday","Tuesday",
"Wednesday","Thursday","Friday"};
string zellersAlgorithm(int day, int month, int year) {
int mon;
if (month > 2)
mon = month;
else {
mon = 12 + month;
year--;
}
int y = year % 100;
int c = year / 100;
int w = day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + 5*c;
w = w % 7;
return weekday[w];
}
int main() {
int day, month, year;
cout << "Enter Day: "; cin >> day;
cout << "Enter Month: "; cin >> month;
cout << "Enter Year: "; cin >> year;
cout << "It was: " << zellersAlgorithm(day, month, year);
}
Kết quả mẫu
Enter Day: 4 Enter Month: 1 Enter Year: 1997 It was: Saturday