题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入
输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。
输出
对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。
样例输入 Copy
2010
样例输出 Copy
2010 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13 10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20 17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27 24 25 26 27 28 29 30 28 28 29 30 31 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12 11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19 18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26 25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11 11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18 18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25 25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
机构平台标程
#include <stdio.h> char *cal_title[12][2] = { { " January ", "Su Mo Tu We Th Fr Sa" }, { " February ", "Su Mo Tu We Th Fr Sa" }, { " March ", "Su Mo Tu We Th Fr Sa" }, { " April ", "Su Mo Tu We Th Fr Sa" }, { " May ", "Su Mo Tu We Th Fr Sa" }, { " June ", "Su Mo Tu We Th Fr Sa" }, { " July ", "Su Mo Tu We Th Fr Sa" }, { " August ", "Su Mo Tu We Th Fr Sa" }, { " September ", "Su Mo Tu We Th Fr Sa" }, { " October ", "Su Mo Tu We Th Fr Sa" }, { " November ", "Su Mo Tu We Th Fr Sa" }, { " December ", "Su Mo Tu We Th Fr Sa" } }; int month[12][6][7]; int days_num[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int first_day(int year); int sp_year (int year); int main (void) { int Y; while (scanf ("%d", &Y) == 1) { for (int a = 0; a < 12; a++) for (int b = 0; b < 6; b++) for (int c = 0; c < 7; c++) month[a][b][c] = 0; //printf ("偏移%d ", first_day (Y)); printf (" %d ", Y); if (sp_year (Y)) days_num[1] = 29; int first = first_day (Y); for (int x = 0; x < 12; x++) { for (int i = 0; i < days_num[x]; i++) { *(*(month[x])+(i + first)) = i + 1; } first = (first + days_num[x]) % 7; } //printf ("%d ", *(*(month[0])+33)); for (int y = 1; y <= 4; y++) { for (int j = 0; j < 2; j++) { for (int x = 1; x <= 3; x++) { printf ("%s", cal_title[(y - 1) * 3 + x - 1][j]); printf (x == 3? " ": " "); } } for (int j = 0; j < 6; j++) { for (int x = 1; x <= 3; x++) { for (int i = 0; i < 7; i++) { if (month[(y - 1) * 3 + x - 1][j][i] == 0) printf (" "); else printf ("%2d", month[(y - 1) * 3 + x - 1][j][i]); if (i != 6) printf (" "); } printf (x == 3? " ": " "); } } } } return 0; } int first_day (int year) { int first = 3; for (int i = 1800; i < year; i++) { first++; if (sp_year (i)) { first++; } } return (first % 7); } int sp_year (int year) { if (year % 100 == 0) { return year % 400 == 0; } else return year % 4 == 0; }