Por favor preciso de ajuda para compreender uma parte do código abaixo:
 
	É um código para desenvolver calendários e na função abaixo:
 
	int dayNumber(int day, int month, int year) 
	{ 
	    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
	    year -= month < 3; 
	    return ( year + year/4 - year/100 + 
	             year/400 + t[month-1] + day) % 7; 
	}
 
	A minha dúvida é sobre os numeros desta linha:
 
	static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,  4, 6, 2, 4 }; 
 
	Eu sei que os numeros se referem ao dia da semana mas o que eu não entendo é porque os números estão nessa ordem?
 
	 
 
	Abaixo está o códico completo:
 
	 
 
	 
 
	 
 
	// A C++ Program to Implement a Calendar 
	// of an year 
	#include<bits/stdc++.h> 
	using namespace std; 
	  
	/*A Function that returns the index of the day 
	  of the date- day/month/year 
	  For e.g- 
	  
	  Index     Day 
	  0         Sunday 
	  1         Monday 
	  2         Tuesday 
	  3         Wednesday 
	  4         Thursday 
	  5         Friday 
	  6         Saturday*/ 
	int dayNumber(int day, int month, int year) 
	{ 
	  
	    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 
	                       4, 6, 2, 4 }; 
	    year -= month < 3; 
	    return ( year + year/4 - year/100 + 
	             year/400 + t[month-1] + day) % 7; 
	} 
	  
	/* 
	  A Function that returns the name of the month 
	  with a given month number 
	  
	  Month Number     Name 
	  0                January 
	  1                February 
	  2                March 
	  3                April 
	  4                May 
	  5                June 
	  6                July 
	  7                August 
	  8                September 
	  9                October 
	  10               November 
	  11               December */ 
	string getMonthName(int monthNumber) 
	{ 
	    string months[] = {"January", "February", "March", 
	                       "April", "May", "June", 
	                       "July", "August", "September", 
	                       "October", "November", "December" 
	                      }; 
	  
	    return (months[monthNumber]); 
	} 
	  
	/* A Function to return the number of days in 
	   a month 
	  
	  Month Number     Name        Number of Days 
	  0                January     31 
	  1                February    28 (non-leap) / 29 (leap) 
	  2                March       31 
	  3                April       30 
	  4                May         31 
	  5                June        30 
	  6                July        31 
	  7                August      31 
	  8                September   30 
	  9                October     31 
	  10               November    30 
	  11               December    31 
	  
	*/ 
	int numberOfDays (int monthNumber, int year) 
	{ 
	    // January 
	    if (monthNumber == 0) 
	        return (31); 
	  
	    // February 
	    if (monthNumber == 1) 
	    { 
	        // If the year is leap then February has 
	        // 29 days 
	        if (year % 400 == 0 || 
	                (year % 4 == 0 && year % 100 != 0)) 
	            return (29); 
	        else 
	            return (28); 
	    } 
	  
	    // March 
	    if (monthNumber == 2) 
	        return (31); 
	  
	    // April 
	    if (monthNumber == 3) 
	        return (30); 
	  
	    // May 
	    if (monthNumber == 4) 
	        return (31); 
	  
	    // June 
	    if (monthNumber == 5) 
	        return (30); 
	  
	    // July 
	    if (monthNumber == 6) 
	        return (31); 
	  
	    // August 
	    if (monthNumber == 7) 
	        return (31); 
	  
	    // September 
	    if (monthNumber == 8) 
	        return (30); 
	  
	    // October 
	    if (monthNumber == 9) 
	        return (31); 
	  
	    // November 
	    if (monthNumber == 10) 
	        return (30); 
	  
	    // December 
	    if (monthNumber == 11) 
	        return (31); 
	} 
	  
	// Function to print the calendar of the given year 
	void printCalendar(int year) 
	{ 
	    printf ("         Calendar - %d\n\n", year); 
	    int days; 
	  
	    // Index of the day from 0 to 6 
	    int current = dayNumber (1, 1, year); 
	  
	    // i --> Iterate through all the months 
	    // j --> Iterate through all the days of the 
	    //       month - i 
	    for (int i = 0; i < 12; i++) 
	    { 
	        days = numberOfDays (i, year); 
	  
	        // Print the current month name 
	        printf("\n  ------------%s-------------\n", 
	               getMonthName (i).c_str()); 
	  
	        // Print the columns 
	        printf("  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n"); 
	  
	        // Print appropriate spaces 
	        int k; 
	        for (k = 0; k < current; k++) 
	            printf("     "); 
	  
	        for (int j = 1; j <= days; j++) 
	        { 
	            printf("%5d", j); 
	  
	            if (++k > 6) 
	            { 
	                k = 0; 
	                printf("\n"); 
	            } 
	        } 
	  
	        if (k) 
	            printf("\n"); 
	  
	        current = k; 
	    } 
	  
	    return; 
	} 
	  
	// Driver Program to check above funtions 
	int main() 
	{ 
	    int year = 2016; 
	    printCalendar(year); 
	  
	    return (0); 
	}