演算法提高 任意年月日曆輸出
阿新 • • 發佈:2019-02-09
/*
問題描述
已知2007年1月1日為星期一。設計一函式按照下述格式列印2007年以後(含)某年某月的日曆,
2007年以前的拒絕列印。為完成此函式,設計必要的輔助函式也是必要的。
樣例輸入
一個滿足題目要求的輸入範例。
例:
2050 3
樣例輸出
與上面的樣例輸入對應的輸出。
例:
資料規模和約定
輸入資料中每一個數的範圍。
例:年 2007-3000,月:1-12。
*//*
Calendar 2008-05
---------------------
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
---------------------*/
/*Calendar 2009-10
---------------------
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
---------------------*/
#include<stdio.h> void shuchu( int , int ); int js_day( int , int ); int main( void ) { int year , month ; scanf("%d%d",&year, &month ); shuchu( year, month ); return 0 ; } int js_day( int year, int month ) { int i , day = 0 ; for( i = 2007 ; i < year ;i ++ ) { if( (i % 4 == 0 && i %100 != 0)||( i%400 == 0 ) ) { day ++ ; } day += 365 ; } int yfts[12] = {31 ,28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; for( i = 0 ; i < month - 1 ; i ++ ) { if((year % 4 == 0 && year %100 != 0)||( year %400 == 0 ) ) { if( i == 2 ) { day ++ ; } } day += yfts[i] ; } return day ; } void shuchu( int year , int month ) { printf("Calendar %d-%02d\n", year , month ); printf("---------------------\n"); printf(" Su Mo Tu We Th Fr Sa\n"); printf("---------------------\n"); int i , day = js_day( year , month ) ; i = day % 7 ; while( i -- >= 0 ) { printf(" "); } int j , xq = day % 7 + 1 ; int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; for( j = 1 ; j <= d[month] ; j ++ ) { printf("%3d",j); if( xq % 7 == 6 && j != d[month] ) { printf("\n"); } xq ++ ; } if((year % 4 == 0 && year %100 != 0)||( year %400 == 0 ) ) { if( month == 2 ) { printf("%3d", j ); } } printf("\n---------------------\n"); }