题目:
给定年月,打印当月的月历表。
输入描述:
输入为一行两个整数,第一个整数是年份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日是周一。
AC代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
int m[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,sum=0;
int fun(int year,int mon) {
sum=0;
for(int i=1900; i<=year-1; i++) {
if(i%4==0&&i%100!=0||i%400==0) {
sum+=366;
} else {
sum+=365;
}
}
if(year%4==0&&year%100!=0||year%400==0) {
m[2]=29;
} else {
m[2]=28;
}
for(int i=1; i<=mon-1; i++) {
sum+=m[i];
}
return sum;
}
int main() {
int year,mon,sum;
cin>>year>>mon;
sum=fun(year,mon);
int pos=(sum%7+1)%7;
cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
for(int i=0; i<pos; i++) {
cout<<" ";
}
for(int i=1; i<=m[mon]; i++) {
printf("%3d ",i);
pos++;
if(pos%7==0) {
cout<<endl;
}
}
return 0;
}