任务描述
X想知道某年某月的日历,你能为他编程输出吗?
输入格式:
输入一行,两个正整数,分别代表年份和月份。
输出格式:
严格按样例格式输出一个月的日历。
第1行输出月份简称和年份,中间有个圆点和空格。
第2行输出表头,为星期一至星期日的缩写,每个单词之间一个空格。
第3行为28个减号。
接下来的几行是日历内容,每个日期输出时占3列,日期前后之间再加1个空格,保证与相对应的星期名称右对齐。
输入样例:
2019 9
输出样例:
SEP. 2019
Mon Tue Wed Thu Fri Sat Sun
---------------------------
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
提示
重要提示:1900年1月1日是星期一。
星期一:Monday 缩写:Mon.
星期二:Tuesday 缩写:Tue.
星期三:Wednesday 缩写:Wed.
星期四:Thursday 缩写:Thu.
星期五:Friday 缩写:Fri.
星期六:Saturday 缩写:Sat.
星期日:Sunday 缩写:Sun.
一月份JAN.
二月份FEB.
三月份MAR.
四月份APR.
五月份MAY.
六月份JUN.
七月份JUL.
八月份AUG.
九月份SEP.
十月份OCT.
十一月份NOV.
十二月份DEC.
代码如下:
#include<iostream>
using namespace std;
int main() {
int y,M,m,x,sum=0;
cin>>y>>M;
if(M==1||M==3||M==5||M==7||M==8||M==10||M==12) //本月有多少天
x=31;
if(M==4||M==6||M==9||M==11)
x=30;
if(M==2){
if((y%4==0&&y%100!=0)||(y%400==0))
x=29;
else
x=28;
}
string ch; //表示月份
switch(M){
case 1:{
ch="JAN";
break;
}
case 2:{
ch="FEB";
break;
}
case 3:{
ch="MAR";
break;
}
case 4:{
ch="APR";
break;
}
case 5:{
ch="MAY";
break;
}
case 6:{
ch="JUN";
break;
}
case 7:{
ch="JUL";
break;
}
case 8:{
ch="AUG";
break;
}
case 9:{
ch="SEP";
break;
}
case 10:{
ch="OCT";
break;
}
case 11:{
ch="NOV";
break;
}
case 12:{
ch="DEC";
break;
}
}
cout<<ch<<". "<<y<<endl;
cout<<"Mon Tue Wed Thu Fri Sat Sun"<<endl; //从星期一开始
cout<<"---------------------------"<<endl;
for(int i=1900; i<y; i++) { //注意题目中提示1900年1月1日是星期一
if((i%4==0&&i%100!=0)||(i%400==0))
sum=sum+366;
else
sum=sum+365;
}
//加上这一年的月份,从1月开始直到要输出月的前一个月
int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int br[12]={31,28,31,30,31,30,31,31,30,31,30,31};
m=M-1;
for(int i=0;i<m;i++){
if((y%4==0&&y%100!=0)||(y%400==0)){
sum+=r[i];
}else{
sum+=br[i];
}
}
//printf("sum=%d\n",sum);
int t;
t=sum%7; //计算上一个月最后在星期几
if(t==1) {
printf("%7d",1);
for(int i=2; i<=x; i++) {
if(i%7==0)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==6)
cout<<endl;
}
}
if(t==0) {
for(int i=1; i<=x; i++) {
if(i%7==1)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==0)
cout<<endl;
}
}
if(t==2) {
printf("%11d%4d%4d%4d%4d",1,2,3,4,5);
cout<<endl;
for(int i=6; i<=x; i++) {
if(i%7==6)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==5)
cout<<endl;
}
}
if(t==3) {
printf("%15d%4d%4d%4d",1,2,3,4);
cout<<endl;
for(int i=5; i<=x; i++) {
if(i%7==5)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==4)
cout<<endl;
}
}
if(t==4) {
printf("%19d%4d%4d",1,2,3);
cout<<endl;
for(int i=4; i<=x; i++) {
if(i%7==4)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==3)
cout<<endl;
}
}
if(t==5) {
printf("%23d%4d",1,2);
cout<<endl;
for(int i=3; i<=x; i++) {
if(i%7==3)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==2)
cout<<endl;
}
}
if(t==6) {
printf("%27d",1);
cout<<endl;
for(int i=2; i<=x; i++) {
if(i%7==2)
printf("%3d",i);
else
printf("%4d",i);
if(i%7==1)
cout<<endl;
}
}
return 0;
}