题目链接:P1202 [USACO1.1]黑色星期五Friday the Thirteenth
程序说明:
年月日三层循环,声明两个变量date和week同时开始计数。date累加日期,模除当月的天数等于0代表这个月的最后一天。week累加周,模除7等于0代表周日。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int n;
//判断闰年
bool judge(int i) {
if(i % 400 == 0 || i % 4 == 0 && i % 100 != 0)
return true;
else
return false;
}
int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int b[7], i, j, k, date, week;
int main() {
scanf("%d", &n);
for(i = 1900; i < 1900 + n; i++) {
if(judge(i))
a[1] = 29;
else
a[1] = 28;
for(j = 0; j < 12; j++) {
for(k = 1; k <= a[j]; k++) {
date++;
date = date % a[j];
week++;
week = week % 7;
if(date == 13)
b[week]++;
}
}
}
printf("%d %d %d %d %d %d %d", b[6], b[0], b[1], b[2], b[3], b[4], b[5]);
return 0;
}