日历本(给出年份生成日历)
题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。现要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入
输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。
输出
对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。
样例输入
2010
样例输出
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std;
int year,ans[23],mon;
int first,second,third; //存储三个月份列星期六的日期
void printMon(int);
int zeller(int,int);
bool judgeyear();
void printMonDay();
int days(int);
int main(){while(cin>>year){for(int i=0;i<30;i++){printf(" ");}printf("%d",year);for(int i=0;i<30;i++){printf(" ");}printf("\n\n");//输出前两行空格和年份mon=1; //月份for(int i=1;i<=4;i++){printMon(i); //打印月份行for(int j=1;j<=6;j++){memset(ans, 0, sizeof(ans)); //星期数组初始化为0int one,two,three;one=two=three=0;if(j==1){one=zeller(mon++, 1);two=zeller(mon++, 1);three=zeller(mon++, 1); //每月的1号是星期几int t=1;for(int k=0;k<7;k++){if(k<one){continue;}ans[k]=t++;}first=t;t=1;for(int k=8;k<15;k++){if(k-8<two){continue;}ans[k]=t++;}second=t;t=1;for(int k=16;k<23;k++){if(k-16<three){continue;}ans[k]=t++;}third=t;printMonDay();continue;} //打印月份第一行memset(ans, 0, sizeof(ans));for(int k=0;k<7;k++){if(first>days(mon-3)){break;} //判断月份最多天数ans[k]=first++;}for(int k=8;k<15;k++){if(second>days(mon-2)){break;}ans[k]=second++;}for(int k=16;k<23;k++){if(third>days(mon-1)){break;}ans[k]=third++;}printMonDay();}}}return 0;
}
void printMon(int row){switch (row) {case 1:printf(" January ");printf(" February ");printf(" March \n");break;case 2:printf(" April ");printf(" May ");printf(" June \n");break;case 3:printf(" July ");printf(" August ");printf(" September \n");break;case 4:printf(" October ");printf(" November ");printf(" December \n");break;default:break;}printf("Su Mo Tu We Th Fr Sa ");printf("Su Mo Tu We Th Fr Sa ");printf("Su Mo Tu We Th Fr Sa\n");
} //输出月份
bool judgeyear(){if(year%400==0){return true;}if(year%4==0&&year%100!=0){return true;}return false;
} //判断闰年
void printMonDay(){for(int i=0;i<23;i++){if(i==7||i==15){printf(" ");continue;}if(ans[i]==0){printf(" ");}else{if(ans[i]<10){printf(" %d",ans[i]);}else{printf("%d",ans[i]);}}if(i!=22){printf(" ");}}printf("\n");
}
int days(int m){if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){return 31;}if(m==4||m==6||m==9||m==11){return 30;}if(judgeyear()){return 29;}return 28;
} //每月有几天
int zeller(int month,int day){int tmp=year;if(month<3){tmp-=1;month+=12;}int c=int(tmp/100),y=tmp-100*c;int w=int(c/4-2*c+y+int(y/4)+(26*(month+1)/10)+day-1);w=(w%7+7)%7;return w;
} //计算星期几--zeller公式
日历本(给出年份生成日历)相关推荐
- PHP生成日历(实例详解)
<PHP典型模块与项目实战大全>第9章日程表模块(PHP+AJAX+XML),本章通过课程表模块的实现将AJAX技术介绍给读者,读者可以通过本章了解到AJAX的基本原理.PHP与AJAX是 ...
- Java自动生成日历,移除节假日和周六日
Java生成日历,排除周六日以及法定节假日 一.生成简单日历,排除周六日和法定节假日 二.生成日历,农历转换,排除节假日 一.生成简单的日历 1.设置某年的开始时间和结束时间,例如:2021-01-0 ...
- python课设题目日历查询系统_Python实例课程17——生成日历
代码实现 #======================================================#功能:生成日历#作者:python小哥#时间:2020-4-8#微信公众号:D ...
- python输出日期语句_python使用calendar输出指定年份全年日历的方法
python使用calendar输出指定年份全年日历的方法 本文实例讲述了python使用calendar输出指定年份全年日历的方法.分享给大家供大家参考.具体实现方法如下: import calen ...
- python学习-综合练习四(最大公约数、最小公倍数、生成日历、递归调用、字符串)
文章目录 最大公约数 最小公倍数 生成日历 递归调用 字符串 说明:本篇博文的知识点大部分来自 Python3 实例 最大公约数 求最大公约数的逻辑比较简单,这里直接上代码: def maxCommD ...
- python生成日历_使用Python实现简易月历生成(2)
生成日历主程序的函数结构和注释:#此功能用于在place处追加字体为f_name,字号为f_size,内容为content的细/粗体字 def convert_text(place, f_name, ...
- C语言实验(十二):函数(输入年份输出日历、闰年判断、元旦星期几)
C语言实验(十二):函数(输入年份输出日历.闰年判断.元旦星期几) 一.判断闰年和某年元旦星期几的函数 1. 编写一个函数,输入年份,判断是否为闰年: 2. 编写一个函数,输入年份,判断当年元旦所对应 ...
- csdn论坛中关于在word中生成日历的问题的解答
原贴地址http://community.csdn.net/Expert/topic/4304/4304006.xml?temp=.9009668 因为代码比较长所以帖到blog中来,也欢迎大家提意见 ...
- oracle 生成 sql语句,Oracle使用SQL语句生成日历的实现方法
Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...
- oracle+生成+sql语句,Oracle使用SQL语句生成日历的实现方法
Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...
最新文章
- 复合梯形公式与复合辛普森公式matlab_【IBE】关于电缆桥架的安装,一定要知道的两个公式!...
- IntelliJ IDEA 安装问题解决
- 数据包接收系列 — IP协议处理流程(一)
- 消息队列背后的设计思想
- Lesson 03:运算符与流程控制
- Liferay 用本地私服(nexus) 打包部署Portlet应用
- 数组名与指向数组的指针之间的联系与区别【数据结构】
- JavaScript中的严格模式
- PAT乙级 1006 换个格式输出整数
- java oop编程中的is-a,has-a,is-like-a的区别
- 安卓开发笔记——探索EventBus(转)
- Cesium:各种坐标转换
- JavaScript网页开发--三.CSS(级联样式表)
- 解决 vim 中文编码问题
- 免安装mysql环境配置、完全卸载和无法启动问题详解
- 如何快速识别图片中的字体是什么字体
- 聊聊什么是自动化测试,什么是自动化测试框架
- 前端笔记-201808
- iOS 项目源码大全 github 国内外大神
- h5(html5),css3入门学习笔记