常识:
1、3、5、7、8、10、12月份,每个月31天。2月闰年有29天,非闰年28天其他月份,每月30天
闰年:一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是能被400整除的年份;
这两次比赛都考了这,我每月有多少天都分不清啊啊啊,怎么做!!!所以今天我特意整理整理
题目描述
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
输入
输入只有一行,即某个特定的年份(大于或等于1998年)。
输出
输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
样例输入
1998
样例输出
3
/*
因为1998年1月2日为星期五,然后计算给定年份每个月的13号与1998年1月2日
相差的天数,如果天数取模7为0那么即为星期五
*/#include <bits/stdc++.h>using namespace std;int year[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 judge(int y)//判断闰年
{if(y % 400 == 0 || y % 100 != 0 && y % 4 == 0)return 1;return 0;
}int calcul(int y, int m, int d)//计算天数
{int sum = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400;int k = judge(y);for(int i = 1; i < m; i++)sum += year[k][i];sum += d;return sum;
}int main ()
{int y;scanf("%d", &y);int ans = 0;int index = calcul(1998, 1, 2);for(int i = 1; i <= 12; i++){int k = calcul(y, i, 13) - index;if(k % 7 == 0) ans++;}printf("%d\n", ans);return 0;
}