Поиск массива t[] в алгоритме Сакамото для определения дня недели

Я хочу знать, как найти, как вычислить значения массива t[] в этом алгоритме?

int dow(int y, int m, int d)        
{        

   static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};        

   y -= m < 3;        

   return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;        

}

person Sudeep    schedule 30.05.2014    source источник
comment
Вы можете выбрать несколько случайных дат, для которых вы знаете день. Теперь вычислите день y -= m < 3; и (y + y/4 - y/100 + y/400 + d) % 7. Теперь установите t[m-1] таким образом, чтобы ваш ответ был правильным. Сделайте это для всех 12 значений m. Чтобы проверить правильность этой формулы, прочитайте этот пост   -  person Mohit Jain    schedule 30.05.2014
comment
Википедия: Определение дня недели объясняет это.   -  person Yu Hao    schedule 30.05.2014
comment
Кстати, это не сработает на и ранее сентября 1752 года.   -  person Bathsheba    schedule 30.05.2014
comment
я прочитал этот пост, но я все еще не могу найти массив t[], объясните, пожалуйста, на примере @MohitJain   -  person Sudeep    schedule 30.05.2014
comment
Хорошо, я бы написал для вас небольшой код.   -  person Mohit Jain    schedule 30.05.2014
comment
спасибо, кажется, я понял :) @MohitJain   -  person Sudeep    schedule 30.05.2014


Ответы (1)


Вы можете использовать код ниже для создания необходимого массива

#include <stdio.h>

int main(void) {
    int arr[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int totalDaysInThisYear = -1, m;  /* Parity would make totalDaysInThisYear = 0 */
    for(m = 1; m <= 12; ++m) {
        const int parity = (m < 3);
        printf("%d\n", (totalDaysInThisYear + parity) % 7);
        totalDaysInThisYear+= arr[m - 1];
    }
    return 0;
}
person Mohit Jain    schedule 30.05.2014
comment
Похоже, что arr[] неверный: слишком много элементов, а июль и август кажутся неправильными. - person Bathsheba; 30.05.2014
comment
@Bathsheba (+1) Спасибо, что указали, я бы поправил массив и сделал код более читаемым для OP. - person Mohit Jain; 30.05.2014