/*
问题描述
已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
输入只有一行
YYYY MM DD
输出格式
输出只有一行
W
数据规模和约定
1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5
*/
#include<stdio.h>
#include<math.h>
int jisuan( int year , int month , int day );
int js_ts( int , int , int , int []);
int pd_rn( int );
int main(void )
{
int year , month , day ;
scanf("%d%d%d", &year ,&month ,&day );
printf("%d\n" , jisuan( year , month , day ));
return 0 ;
}
int pd_rn( int y )
{
if( (y % 4 == 0 && y %100 != 0)||( y%400 == 0 ))
{
return 1;
}
return 0 ;
}
int jisuan( int year , int month , int day )
{
int sum = 0 , i ;
int yfts[12] = {31 ,28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
int xq = 6 , ts = 0 ;
if( year > 2011 )
{
for( i = 2011 ; i < year ; i ++ )
{
if( pd_rn( i ) )
{
sum ++ ;
}
sum += 365 ;
}
sum += js_ts( year , month , day , yfts );
}
else
{
if( year < 2011 )
{
for( i = 1599 ; i < year ; i ++ )
{
if( pd_rn( i ) )
{
sum ++ ;
}
sum += 365 ;
}
sum += js_ts( year , month , day , yfts );
return ( sum + 4)%7 == 0 ? 7 : ( sum + 4 )%7 ;
}
else
{
sum = js_ts( year , month , day , yfts );
}
}
return (sum + xq - 1 )%7 == 0 ? 7 : (sum + xq -1 ) % 7 ;
}
int js_ts( int y , int m , int d , int yfts[])
{
int i , sum = 0 ;
for( i = 0 ; i < m - 1; i ++ )
{
if( pd_rn( y ) && i == 1 )
{
sum ++ ;
}
sum += yfts[i] ;
}
return sum + d ;
}