题目描述

   我们经常需要使用日历,所以需要一个能生成日历的程序。现要求你写一个程序,只需要输入年份,就能生成正确的日历。

输入

   输入包含多组测试数据。每组输入一个整数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公式

日历本(给出年份生成日历)相关推荐

  1. PHP生成日历(实例详解)

    <PHP典型模块与项目实战大全>第9章日程表模块(PHP+AJAX+XML),本章通过课程表模块的实现将AJAX技术介绍给读者,读者可以通过本章了解到AJAX的基本原理.PHP与AJAX是 ...

  2. Java自动生成日历,移除节假日和周六日

    Java生成日历,排除周六日以及法定节假日 一.生成简单日历,排除周六日和法定节假日 二.生成日历,农历转换,排除节假日 一.生成简单的日历 1.设置某年的开始时间和结束时间,例如:2021-01-0 ...

  3. python课设题目日历查询系统_Python实例课程17——生成日历

    代码实现 #======================================================#功能:生成日历#作者:python小哥#时间:2020-4-8#微信公众号:D ...

  4. python输出日期语句_python使用calendar输出指定年份全年日历的方法

    python使用calendar输出指定年份全年日历的方法 本文实例讲述了python使用calendar输出指定年份全年日历的方法.分享给大家供大家参考.具体实现方法如下: import calen ...

  5. python学习-综合练习四(最大公约数、最小公倍数、生成日历、递归调用、字符串)

    文章目录 最大公约数 最小公倍数 生成日历 递归调用 字符串 说明:本篇博文的知识点大部分来自 Python3 实例 最大公约数 求最大公约数的逻辑比较简单,这里直接上代码: def maxCommD ...

  6. python生成日历_使用Python实现简易月历生成(2)

    生成日历主程序的函数结构和注释:#此功能用于在place处追加字体为f_name,字号为f_size,内容为content的细/粗体字 def convert_text(place, f_name, ...

  7. C语言实验(十二):函数(输入年份输出日历、闰年判断、元旦星期几)

    C语言实验(十二):函数(输入年份输出日历.闰年判断.元旦星期几) 一.判断闰年和某年元旦星期几的函数 1. 编写一个函数,输入年份,判断是否为闰年: 2. 编写一个函数,输入年份,判断当年元旦所对应 ...

  8. csdn论坛中关于在word中生成日历的问题的解答

    原贴地址http://community.csdn.net/Expert/topic/4304/4304006.xml?temp=.9009668 因为代码比较长所以帖到blog中来,也欢迎大家提意见 ...

  9. oracle 生成 sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

  10. oracle+生成+sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

最新文章

  1. 复合梯形公式与复合辛普森公式matlab_【IBE】关于电缆桥架的安装,一定要知道的两个公式!...
  2. IntelliJ IDEA 安装问题解决
  3. 数据包接收系列 — IP协议处理流程(一)
  4. 消息队列背后的设计思想
  5. Lesson 03:运算符与流程控制
  6. Liferay 用本地私服(nexus) 打包部署Portlet应用
  7. 数组名与指向数组的指针之间的联系与区别【数据结构】
  8. JavaScript中的严格模式
  9. PAT乙级 1006 换个格式输出整数
  10. java oop编程中的is-a,has-a,is-like-a的区别
  11. 安卓开发笔记——探索EventBus(转)
  12. Cesium:各种坐标转换
  13. JavaScript网页开发--三.CSS(级联样式表)
  14. 解决 vim 中文编码问题
  15. 免安装mysql环境配置、完全卸载和无法启动问题详解
  16. 如何快速识别图片中的字体是什么字体
  17. 聊聊什么是自动化测试,什么是自动化测试框架
  18. 前端笔记-201808
  19. iOS 项目源码大全 github 国内外大神
  20. h5(html5),css3入门学习笔记

热门文章

  1. 基于python的微信机器人_基于python的微信机器人
  2. 17track包裹单个物流轨迹抓取(一)
  3. EXCEL 如何删除重复值,并保留重复值的第一个选项
  4. VMX 进程已提前退出。VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。
  5. MSP430F149--点亮LED灯程序代码
  6. Android中实现双指缩放的功能
  7. ios开发工程师常见面试题汇总
  8. 简单几个操作小技巧提高你的生产力!☀️我好了,你呢☀️
  9. 计算机网络(谢希仁-第八版)第一章习题全解
  10. 获取Unique reads方法