总时间限制: 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 }