洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth

题目传送门

解题思路:

纯模拟,水题凑题数.

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 bool rn(int);//声明判断是否是闰年的函数
 4 int main(){
 5     int n1;
 6     cin>>n1;//同题目的n
 7     int n=1900,y=1,r=1,xq=1;//初始化并声明年月日
 8     int yue[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}};//记录每个月有几天
 9     int njs;//记录是否是闰年
10     int wew[8]={0,0,0,0,0,0,0,0};//初始化周一到周天有多少个在13号
11     while(1){//非0为true
12         if(n==1900+n1&&y==1&&r==1){//如果到了指定日期就推出循环
13             break;
14         }
15         if(rn(n)){//判断是否为闰年
16             njs=1;
17         }
18         else{
19             njs=0;
20         }
21         r+=1;//日加一
22         xq+=1;//星期加一
23         if(r>yue[njs][y]){//如果日大于这个月的天数,月加一,日归一
24             r=1;
25             y+=1;
26         }
27         if(y>12){//如果月大于12,年加一,月归一
28             n+=1;
29             y=1;
30         }
31         if(xq>7){//如果星期大于7,星期归一
32             xq=1;
33         }
34         if(r==13){//如果日等于13,这个星期在13号的次数加一
35             wew[xq]+=1;
36         }
37     }
38     cout<<wew[6]<<" "<<wew[7]<<" "<<wew[1]<<" "<<wew[2]<<" "<<wew[3]<<" "<<wew[4]<<" "<<wew[5];//输出
39     return 0;//完美无瑕疵结束
40 }
41 bool rn(int h){
42     if(h%100==0){//判断是否是世纪年
43         if(h%400==0){//如能被400整除,就是闰年
44             return true;
45         }
46         else{//否则不是
47             return false;
48         }
49     }
50     else{
51         if(h%4==0){//能被四整除,就是闰年
52             return true;
53         }
54         else{//否则不是
55             return false;
56         }
57     }
58 }
原文地址:https://www.cnblogs.com/lipeiyi520/p/11290194.html