3938 - 日历输出
时间限制 : 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; }