24:打印月历

24:打印月历

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

给定年月,打印当月的月历表。

输入
输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。
输出
输出为月历表。月历表第一行为星期表头,如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行一次是当月各天的日期,从1日开始到31日(30日或28日)。
日期数字应于星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。
样例输入
2006 5
样例输出
Sun Mon Tue Wed Thu Fri Sat
      1   2   3   4   5   6
  7   8   9  10  11  12  13
 14  15  16  17  18  19  20
 21  22  23  24  25  26  27
 28  29  30  31
提示
闰年判断方法:能被4整除但不能被100整除,或者能被400整除。
1900年1月1日是周一。
  1 #include<iostream>
  2 using namespace std;
  3 int bgyear,bgmonth,bgday;
  4 int enyear,enmonth,enday;
  5 int month[21]={0,31,28,31,30,31,30,31,31,30,31,30,31};//非闰年
  6 int rmonth[21]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年 
  7 int flag=1;
  8 int tot=0;
  9 int dow=1;
 10 string week[8]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
 11 int main()
 12 {
 13     cin>>enyear>>enmonth;
 14     bgyear=1900;
 15     bgmonth=1;
 16     bgday=1;
 17     for(int i=1900;i<=enyear;i++)//寻找年数上的差异 
 18     {
 19         if((i%4==0&&i%100!=0)||(i%400==0))
 20         {
 21             for(int j=1;j<=12;j++)
 22             {
 23                 for(int k=1;k<=rmonth[j];k++)
 24                 {
 25                     if(i==enyear&&j==enmonth)
 26                         {
 27                             int bj=0;
 28                             cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
 29                             for(int i=1;i<=dow;i++)
 30                             {
 31                                 if(dow==7)break;
 32                                 bj++;
 33                                 for(int i=1;i<=3;i++)
 34                                 cout<<" ";
 35                                 cout<<" ";
 36                             }//确定第一个数的位置 
 37                             for(int k=1;k<=rmonth[j];k++)
 38                             {
 39                                 if(k<10)
 40                             {
 41                                 if(bj!=6&&k!=rmonth[j])
 42                                 cout<<"  "<<k<<" ";
 43                                 else
 44                                 {
 45                                     cout<<"  "<<k;
 46                                 }
 47                                 bj++;
 48                                 if(bj==7)
 49                                 {
 50                                     cout<<endl;
 51                                     bj=0;    
 52                                 }
 53                             }
 54                                 else
 55                                 {
 56                                 if(bj!=6&&k!=rmonth[j])
 57                                 cout<<" "<<k<<" ";
 58                                 else
 59                                 {
 60                                     cout<<" "<<k;
 61                                 }
 62                                 if(k==rmonth[j])return 0;
 63                                 bj++;
 64                                 if(bj==7)
 65                                 {
 66                                     cout<<endl;
 67                                     bj=0;    
 68                                 }
 69                             }
 70                             }
 71                             return 0;
 72                         }//边界条件 
 73                         dow++;
 74                         if(dow==8)
 75                         dow=1;
 76                         
 77                 }
 78                  
 79             }
 80         }//闰年 
 81         else
 82         {
 83             for(int j=1;j<=12;j++)
 84             {
 85                 for(int k=1;k<=month[j];k++)
 86                 {
 87                     if(i==enyear&&j==enmonth)
 88                         {
 89                             int bj=0;
 90                             cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
 91                             for(int i=0;i<=dow-1;i++)
 92                             {
 93                                 if(dow==7)break;
 94                                 if(bj==6)break;
 95                                 bj++;
 96                                 for(int i=1;i<=3;i++)
 97                                 cout<<" ";
 98                                 cout<<" ";
 99                             }//确定第一个数的位置 
100                             for(int k=1;k<=month[j];k++)
101                             {
102                             if(k<10)
103                             {
104                                 if(bj!=6&&k!=month[j])
105                                 cout<<"  "<<k<<" ";
106                                 else
107                                 {
108                                     cout<<"  "<<k;
109                                 }
110                                 bj++;
111                                 if(bj==7)
112                                 {
113                                     cout<<endl;
114                                     bj=0;    
115                                 }
116                             }
117                             else
118                             {
119                                 if(bj!=6&&k!=month[j])
120                                 cout<<" "<<k<<" ";
121                                 else
122                                 {
123                                     cout<<" "<<k;
124                                 }
125                                 bj++;
126                                 if(bj==7)
127                                 {
128                                     cout<<endl;
129                                     bj=0;    
130                                 }
131                                 if(k==month[j])return 0;
132                             }
133                             }
134                             return 0;
135                         }//边界条件 
136                         dow++;
137                         if(dow==8)
138                         dow=1;
139                 }       
140                      
141                 
142                 
143                      
144     }
145                 
146 }
147 }
148 }
原文地址:https://www.cnblogs.com/zwfymqz/p/6539488.html