USACO Section 1.1 Friday the Thirteenth

/*
ID:linyvxi1
LANG:C++
TASK:friday
*/
#include <stdio.h>
int day_map[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int final[8]={0};

bool leap_year(int n)
{
	if(n%400==0||(n%4==0&&n%100!=0))
			return true;
	return false;
}

int cal(int year)
{
	int i,days=0;
	for(i=1900;i<year;i++){
		days+=leap_year(i)?366:365;
	}
	return days;
}

int cal2(int day,int month)
{
	int j,tot=day;
	for(j=1;j<month;j++)	
		tot+=day_map[j];
	tot+=13;
	return tot;
}

int main()
{
	FILE*	fin=fopen("friday.in","r");
	FILE*	fout=fopen("friday.out","w");

	int N;
	fscanf(fin,"%d",&N);
	int i,j,k;
	for(i=0;i<=N-1;i++){
		
		//先计算到这年1月1号有多少天
	//	for(j=0;j<7;j++)
	//		final[j]=0;
		int day=cal(1900+i);
		if(leap_year(1900+i))
			day_map[2]=29;
		else day_map[2]=28;
		for(j=1;j<=12;j++){
			int total=cal2(day,j);
			if(total%7==0)
				final[7]++;
			else 
				final[total%7]++;
		}

	}

	fprintf(fout,"%d %d ",final[6],final[7]);
	for(i=1;i<=5;i++){
		fprintf(fout,"%d",final[i]);
		if(i==5)
			//putchar('\n');
			fprintf(fout,"\n");
		else fprintf(fout," ");
	}
}
原文地址:https://www.cnblogs.com/yangce/p/2221365.html