1032. 小强的生日
单点时限: 2.0 sec
内存限制: 256 MB
小强出生于 2008 年 2 月 29 日。与别的小朋友不一样,小强要隔四年才能过一次生日 L。小强很想知道自己什么时侯才能过生日,因此想请你编写一个程序显示 2 月份的日历给他看,以方便他确定自己的生日。
2008 年 2 月的日历如下:
SU MO TU WE TH FR SA
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
请按照此格式输出指定年份 2 月的日历。
输入格式
输入一行范围为 [2008,2100] 内的整数,每个整数以一个空格分隔。
输出格式
输出每个整数对应年的 2 月份的日历。每个日历之后输出一个空行(包括最后一个),日历数字之间以一个空格分隔,但是结尾不能有空格,一列数字右对齐,左边用空格补齐。如以 _
表示空格,一个典型的输出格式为:
_SU_MO_TU_WE_TH_FR_SA
_________________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
样例
Input
2008 2009 2010
Output
SU MO TU WE TH FR SA 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 SU MO TU WE TH FR SA 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 SU MO TU WE TH FR SA 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
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//统计2008到x-1年的闰年个数
int is_year_sum(int x){
int sum=0;
for(int i=2008;i<x;i++){
if((i%4==0&&i%100!=0) || i%400==0)sum++;
}
return sum;
}
int is_year(int x){
if((x%4==0&&x%100!=0) || x%400==0)return 1;
return 0;
}
int main()
{
int year;
int space=5;//从2008年日历开始2月1号前面的空缺,当年为闰年,下一年后移2个,否则移动一个
while(scanf("%d",&year)==1){
printf(" SU MO TU WE TH FR SA\n");
int num=is_year_sum(year);
int backnum=(5+num*2+(year-2008-num) )%7;
for(int i=0;i<backnum;i++){
printf(" ");
}
int date=1;
for(int j=backnum+1;j<=7;j++){
printf("%3d",date);
date++;
}
printf("\n");//第一行
int count=0;
for(int k=date;k<29;k++){
printf("%3d",date);
date++;
count++;
if(count%7==0&&k!=28)printf("\n");
}
if(is_year(year)&&count%7==0){
printf("\n 29\n");
}else if(is_year(year)&&count%7!=0){
printf(" 29\n");
}
else printf("\n");
printf("\n");
}//最后这里格式对齐比较复杂
return 0;
}