AcWing 1341. 十三号星期五
原题链接
简单
作者:
由比滨结衣
,
2021-01-20 14:26:39
,
所有人可见
,
阅读 357
#include<iostream>
using namespace std;
int Mon, Tue, Wed, Thu, Fri, Sat, Sun;
int n;
bool judge(int year){
if(year % 400 == 0 || (year % 4 ==0 && year % 100 != 0)) return true;
return false;
}
int one_month_day(int month, bool isLEAP){
if(month == 4 || month == 6 || month == 9 || month == 11) return 30;
if(month == 2 && isLEAP) return 29;
if(month == 2 && !isLEAP) return 28;
return 31;
}
void f(int x){
switch(x){
case 1:Mon++;return;
case 2:Tue++;return;
case 3:Wed++;return;
case 4:Thu++;return;
case 5:Fri++;return;
case 6:Sat++;return;
case 0:Sun++;return;
}
}
int main(){
int n;
cin >> n;
int day = 13, month = 1, year = 1900;
//day表示离1900.1.1隔了多少天
//多加了一天方便取余,正好1900.1.1是星期一
bool isLeap;//是否是闰年
while(year != 1900 + n){
isLeap = judge(year);//先判断是否是闰年
f(day % 7);//用当前天数取余7,结果就是星期几
day += one_month_day(month, isLeap);
//将当前天数加上本月的天数,得到的天数就是下个月的13号
month = month % 12 + 1;
if(month == 1) year++;//如果月数为1表示已经过了一年
}
printf("%d %d %d %d %d %d %d", Sat, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
return 0;
}