#include<stdio.h>
int leap(int a)
{
	if(a%400==0||(a%4==0&&a%100!=0))
	    return 366;
	else
	    return 365;
}
int day(int a,int b)
{
	if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
	    return 31;
	else if(b==4||b==6||b==9||b==11)
	    return 30;
	else
	{
		if(leap(a)==366)
		    return 29;
		else
		    return 28;
	}
}
int nian(int a)
{
	int i;
	int sum=0;
	if(a==2011)
	{
		return sum;
	}
	else if(a<2011)
	{
		for(i=a+1;i<2011;i++)
		    sum+=leap(i);
		return sum;
	}
	else if(a>2011)
	{
		for(i=2012;i<a;i++)
		    sum+=leap(i);
		return sum;
	}
}
int yue(int a,int b,int c,int d)
{
	int i,j;
	int sum=0;
	for(i=b+1;i<13;i++)
	    sum+=day(a,i);
	for(i=1;i<d;i++)
	    sum+=day(c,i);
	return sum;
}
int answer(int a)
{
	if(a==5)
	    return 5;
	else if(a==6||a==-1)
	    return 6;
	else if(a==7||a==0)
	    return 7;
	else if(a==8||a==1)
	    return 1;
	else if(a==9||a==2)
	    return 2;
	else if(a==10||a==3)
	    return 3;
	else if(a==11||a==4)
	    return 4;
}
int main()
{
	int a,b,c;
	int sum;
	int chaa,chab,chac;
	int i,j,k;
	while(scanf("%d%d%d",&a,&b,&c)!=EOF)
	{
		sum=0;
		sum+=nian(a);
		if(a<2011)
		{
		    sum+=yue(a,b,2011,11);
		    sum+=(day(a,b)-c+11);
		}
		else if(a>2011)
		{
		    sum+=yue(2011,11,a,b);
		    sum+=(day(2011,11)-11+c);
		}
		else
		{
		    sum+=yue(2011,12,2011,11);
		    sum+=11;
		}
		sum%=7;
		if(a>2011)
		    sum+=5;
		else if(a<2011)
		    sum=5-sum;
		else
		{
			if(b<11)
			    sum=5-sum;
			else if(b>11)
			    sum+=5;
			else
			{
				if(c>11)
				    sum+=5;
				else if(c<11)
				    sum=5-sum;
				else
				    sum=5;
			}
		}
		printf("%d\n",answer(sum));
	}
	return 0;
}原文:http://blog.csdn.net/wangluoershixiong/article/details/43818317