【NOI OJ】18 打印月历
来源:互联网 发布:迅雷7mac官方下载 编辑:程序博客网 时间:2024/05/17 08:44
24:打印月历
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
给定年月,打印当月的月历表。
- 输入
- 输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。
- 输出
- 输出为月历表。月历表第一行为星期表头,如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行一次是当月各天的日期,从1日开始到31日(30日或28日)。
日期数字应于星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。 - 样例输入
2006 5
- 样例输出
Sun Mon Tue Wed Thu Fri Sat 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
- 提示
- 闰年判断方法:能被4整除但不能被100整除,或者能被400整除。
1900年1月1日是周一。 - #------------------------------------------------------------------------------#
- 此题其实确定了每月的一号是周几后,打印起来不是很困难。
- 首先来处理每月的一号是周几:
- 它告诉我们1900年1月1日为周一,且数据不在1900年之前,所以就可以计算从1900年1月到输入的y年m月共有多少天,储存在k变量中,最后k%7就是星期几了。
- 怎么计算?循环从1900年到y-1年,每次循环加上第i年的天数(无非就是366和365),最后加上一个循环从y年1月到m月,每次加上那个月的天数就行了。
- 接下来要处理打印的问题了:
- 第一:k是0-6,但是月历是从周天,周一,周二……到周六,所以0就代表周天,其他的就是一一对应了。
- 然后就只有第一排要打印空格,空格数量就是k*4,接着要判断一行是否打完,用一个变量t,每打印一个t++,如果t+k==7,就代表一行打完,变打印一个换行,注意:每打一行t和k都要清零(其实后面k就没什么用了,但第一次一定要归零)
- 就是这样了,附代码:
#include<cstdio>int ps(int x,int y){if(y==2)if((x%4==0&&x%100!=0)||(x%400==0))return 29;elsereturn 28;else if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)return 31;elsereturn 30;}//判断每月的天数int main(){int m,y;scanf("%d%d",&y,&m);printf("Sun Mon Tue Wed Thu Fri Sat\n");//打印月历的开头int k=1;for(int i=1900;i<y;i++)if((i%4==0&&i%100!=0)||(i%400==0))k+=366;elsek+=365;for(int j=1;j<m;j++)k+=ps(y,j);k=k%7;//计算第y年m月1号是周几//printf("%d",k);//本来出了点问题,用这个来看看int t=0,p=0;//两个临时变量for(int i=1;i<=ps(y,m);i++)//循环到当月的最后一天{if(p==0)//用p来看是否已经打印过第一排才打印的空格{for(int j=0;j<k*4;j++)printf(" ");//打印空格p=1;}printf("%3d ",i);//控制格式并打印t++;if(t+k==7)//如果一排打印完了{printf("\n");//打印换行t=0;k=0;//一定要清零}}return 0;}
By WZY
0 0
- 【NOI OJ】18 打印月历
- Lisp练习-打印月历
- Java打印月历GUI
- 控制台打印当月月历
- 打印月历题解
- 打印月历题解
- 24:打印月历题解
- 在控制台打印月历
- 【java】打印月历
- 使用C语言打印月历
- Openjudge 1.13 24:打印月历
- 【NOI OJ】1797 金银岛
- NOI-OJ矩形分割
- 月历
- 月历
- 月历
- 月历
- 打印月历的程序(C语言)
- 十年沉浮,也落魄过,当时是个程序员
- rocoofix原理分析
- C++ sgi STL学习笔记之non-mutating algorithm
- 什么是C++虚函数、虚函数的作用和使用方法
- [SPOJ BALNUM - Balanced Numbers]数位DP
- 【NOI OJ】18 打印月历
- tcp数据重传时间细节探秘及数据中心优化
- 如何指定第一个dex中的类
- Linux系统CPU核数等信息查看
- C++ STL--stack/queue 的使用方法
- c语言实现谷歌笔试题:返回参数二进制中1的个数
- Session管理
- mysql 中外键的作用
- html <meta>