题目描述
寒假马上要到了,身为志愿者的小明也是期待万分的。
小明对于寒假很是期待,所以每天都要看一下日历。众所周知,看日历也是很麻烦的。现在小明想知道某年某月的日历格式,你能告诉他吗?
格式:每行总共七列, 分别为周一、周二、…、周日。每个数字占两列,如果该月不存在该数字输出两个空格,两个数字之间有空格,每行最后一个数字后面没有空格, 到该月最后一天直接换行,具体数据格式参照样例
输入
多组测试数据。
每组测试数据一个年份n和一个月份m(2015<=n<=2018, 1<=m<=12)。注:2015年01月01日是周四
输出
输入这一年该月的日历格式。
注:每组样例后都有空行
样例输入
2016-12
2017-01
样例输出
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
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
注意下最后一行如果是7个数的话会多输入一个换行,加个限制条件就可以了。
#include<stdio.h>
int main(){
int a[5][13];
int b[5];
for(int i=1;i<=4;i++)
{
for(int j=1;j<13;j++)
{
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
a[i][j]=31;
else if(j==2)a[i][j]=28;
else a[i][j]=30;
}
}
a[2][2]=29; b[1]=4; b[2]=5; b[3]=7; b[4]=1;
int n,m,first,k;
while(~scanf("%d-%d",&n,&m)){
int u=n-2014;
first=b[u];
int q=b[u];
for(int i=1;i<m;i++)
{
if(q+a[u][i]%7>7)first=(q+a[u][i]%7)%7,q=first;
else
first=(q+a[u][i]%7)%8,q=first;
}
for(int i=1;i<=first-1;i++)printf(" ");
for(int i=1;i<=8-first;i++)
printf("%2d ",i),k=i;
printf("\n");
for(int i=k+1;i<=a[u][m];i++)
{
printf("%2d ",i);
if((i-k)%7==0&&i<28)printf("\n");
}
printf("\n");
printf("\n");
}
return 0;
}