您的位置:首页 > 其它

USACO section 1.1 Friday the Thirteenth

2012-07-16 20:12 489 查看
这道题挺不好写的,题目是说给出一个年份范围,统计这个范围内星期一到星期日为 13 号的个数。

/*
PROG: friday
LANG: C++
*/
# include <cstdio>

const char daytab[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

int isLeap(int year)
{
return year%4 == 0 && year%100 != 0 || year%400 == 0 ? 1 : 0;
}

int dayOfMonth(int year, int day)
{
int leap, i;
leap = isLeap(year);
for (i = 1; day > daytab[leap][i]; ++i)
day -= daytab[leap][i];
return day;
}

int main()
{
int n;

freopen("friday.in", "r", stdin);
freopen("friday.out", "w", stdout);

scanf("%d", &n);
int f[7];
for (int i = 0; i < 7; ++i)
f[i]  = 0;
int day = 0, wk = 0;
for (int year = 1900; year < 1900+n; )
{
wk = (wk+1) % 7;
++day;
if (dayOfMonth(year, day) == 13) ++f[wk];
if ((day == 365 && isLeap(year) == 0) || (day == 366 && isLeap(year) == 1))
{
++year;
day = 0;
}
}
printf("%d", f[6]);
for (int i = 0; i < 6; ++i)
printf(" %d", f[i]);
printf("\n");

fclose(stdin);
fclose(stdout);

return 0;
}


/**/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: