3938 - 日历输出

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 512 MB

小明考试遇见《活了多少天》这个题,遗憾的是没有做出来,但是经过考试后的讲解小明已经完全懂得了这个题,并且会熟练的做出此题,还保证以后遇见此类题,一定能够做出来。并且还想在做一次。

已知2007年1月1日为星期一。

设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
比如输入2007 1

<span style="font-size:16px;">则输出为</span> 

<span style="font-size:16px;"><span style="font-family:SimHei;">---------------------</span><br />

 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 30 31
---------------------

题目输入

输入数据包含多组,每组有两个整数m,n。m(m > 2007)表示年份,n表示月份,输入数据保证合法。

题目输出

对于每组输出数据,按照题目中的格式输出,日历中每个数字占三列。

输入/输出样例

输入格式

2010 9

输出格式

---------------------
 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 30
---------------------


C语言解答

#include <stdio.h>
int run=0;
int getmonthnum(int month)
{
    switch(month)
    {
    case 1:
        return 31;
    case 2:
        if(run) return 29;
        else return 28;
    case 3:
        return 31;
    case 4:
        return 30;
    case 5:
        return 31;
    case 6:
        return 30;
    case 7:
        return 31;
    case 8:
        return 31;
    case 9:
        return 30;
    case 10:
        return 31;
    case 11:
        return 30;
    case 12:
        return 31;
    }
}
int isrun(int year)
{
    if(year%400==0 || (year%4==0 && year%100!=0))
        return 1;
    return 0;
}
void print(int year,int month,int begin)
{
    int day,i = 1,j;
    day = getmonthnum(month);
    printf("---------------------\n");
    printf(" Su Mo Tu We Th Fr Sa\n");
    printf("---------------------\n");
    if(begin == 6) begin = -1;
    for(j = -1; j < begin; j++)
        printf("   ");
    for( ; begin < 6; begin++)
        printf("%3d",i++);
    printf("\n");
    j=0;
    while(i <= day)
    {
        printf("%3d",i++);
        j++;
        if(j == 7)
        {
            j=0;
            printf("\n");
        }
    }
    if(j!=0) printf("\n---------------------");
    else printf("---------------------");
}
int main()
{
    int year,month,i,sum=0;
    while(scanf("%d%d",&year,&month)!= EOF)
    {
        sum = 0;
        run = 0;
        for(i=2007; i<year; i++)
            if(isrun(i)) sum+=366;
            else sum+=365;
        if(isrun(year)) run=1;

        for(i=1; i<month; i++)
            sum+=getmonthnum(i);
        print(year,month,sum%7);
        printf("\n");
    }
    return 0;
}

C++解答

#include<stdio.h>
int main()
{
    int s[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day;
    while(scanf("%d%d",&year,&month) != EOF)
    {
        printf("---------------------\n");
        printf(" Su Mo Tu We Th Fr Sa\n");
        printf("---------------------\n");
        day = 1;
        for(int i=2007; i<year; i++)
        {
            day+=365;
            if((i%4==0&&(i%100)!=0)||i%400==0)
                day+=1;
        }
        for(int j=1; j<month; j++)
        {
            day+=s[j];
        }
        int a=s[month];
        if(((year%4==0&&(year%100)!=0)||(year%400==0))&&(month==2))
        {
            a=a+1;
        }
        if(((year%4==0&&(year%100)!=0)||(year%400==0))&&(month>2))
        {
            day += 1;
        }
        int t,q,w;
        t = day % 7;
        q = t;
        for(int k=0; k<t; k++)
        {
            printf("   ");
        }
        for( w=1; w<=a; w++)
        {
            printf("%3d",w);
            q++;
            if(q%7==0)
                printf("\n");
        }
        if((q%7)!=0)
        {
            printf("\n");
        }
        printf("---------------------\n");
    }
    return 0;
}