1979: 赛前的准备--日历

题目描述
寒假马上要到了,身为志愿者的小明也是期待万分的。
小明对于寒假很是期待,所以每天都要看一下日历。众所周知,看日历也是很麻烦的。现在小明想知道某年某月的日历格式,你能告诉他吗?
格式:每行总共七列, 分别为周一、周二、…、周日。每个数字占两列,如果该月不存在该数字输出两个空格,两个数字之间有空格,每行最后一个数字后面没有空格, 到该月最后一天直接换行,具体数据格式参照样例
输入
多组测试数据。

每组测试数据一个年份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; 
         }

猜你喜欢

转载自blog.csdn.net/weixin_43731933/article/details/85257208