/*
ID: ****
LANG: C
TASK: friday
*/
/*#define __DEBUG__*/
#include <stdio.h>
int main()
{
int period, last, year, leap, i;
int day=0; // 0=Mon ... 6=Sun
int count[7];
for(i=0 ; i<7 ; i++)
count[i] = 0;
#ifndef __DEBUG__
FILE *fin;
FILE *fout;
fin = fopen("friday.in","r");
fout = fopen("friday.out","w");
fscanf(fin,"%d",&period);
#else
do{
printf("Enter period(N years) : ");
scanf("%d",&period);
}while(period<=0 || period>400);
#endif
last = 1900+period;
for(year=1900 ; year<last ; year++)
{
if(year%100 == 0)
{
if(year%400 == 0)
leap = 1;
else
leap = 0;
}
else if(year%4 == 0)
leap = 1;
else
leap = 0;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+leap)%7;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+2)%7;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+2)%7;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+2)%7;
count[day]++;
day = (day+3)%7;
count[day]++;
day = (day+2)%7;
count[day]++;
day = (day+3)%7;
}
#ifndef __DEBUG__
for(i=0 ; i<6 ; i++)
fprintf(fout,"%d ",count[i]);
fprintf(fout,"%dn",count[6]);
fclose(fin);
fclose(fout);
#else
for(i=0 ; i<7 ; i++)
printf("%d ",count[i]);
#endif
return 0;
}
1900년부터 시작해서 주어진 몇년의 기간동안 날짜가 13일이 되는 요일의 수를 구하는 프로그램인데, 조금 생각하고 코딩을 했더니 결과가 너무 지저분해졌다. 게다가 1월부터 12월까지 달마다 요일을 구하는 부분에서 날짜를 미리 계산해서 넣는 만행을...;
저부분을 제대로 하자면, 각 달의 날짜수를 배열같은 곳에 저장해둔 다음, 윤년을 판단해서 윤년일 경우 2월 계산부분에 하루를 더해주고, 반복문으로 해결을 볼수 있을 듯한데, 일단 이걸로 이번문제는 통과..;;; 더 고치기가 귀찮다.
'Developing' 카테고리의 다른 글
The Java Programming Language - 1일차 (0) | 2007.02.03 |
---|---|
PERL에서의 웹 프로그래밍 (0) | 2006.06.03 |
USACO Training - What Time Is It? (0) | 2006.05.15 |