24:打印月历

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日是周一。

  1 #include<iostream>
  2 using namespace std;
  3 int bgyear,bgmonth,bgday;
  4 int enyear,enmonth,enday;
  5 int month[21]={0,31,28,31,30,31,30,31,31,30,31,30,31};//非闰年
  6 int rmonth[21]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年 
  7 int flag=1;
  8 int tot=0;
  9 int dow=1;
 10 string week[8]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
 11 int main()
 12 {
 13     cin>>enyear>>enmonth;
 14     bgyear=1900;
 15     bgmonth=1;
 16     bgday=1;
 17     for(int i=1900;i<=enyear;i++)//寻找年数上的差异 
 18     {
 19         if((i%4==0&&i%100!=0)||(i%400==0))
 20         {
 21             for(int j=1;j<=12;j++)
 22             {
 23                 for(int k=1;k<=rmonth[j];k++)
 24                 {
 25                     if(i==enyear&&j==enmonth)
 26                         {
 27                             int bj=0;
 28                             cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
 29                             for(int i=1;i<=dow;i++)
 30                             {
 31                                 if(dow==7)break;
 32                                 bj++;
 33                                 for(int i=1;i<=3;i++)
 34                                 cout<<" ";
 35                                 cout<<" ";
 36                             }//确定第一个数的位置 
 37                             for(int k=1;k<=rmonth[j];k++)
 38                             {
 39                                 if(k<10)
 40                             {
 41                                 if(bj!=6&&k!=rmonth[j])
 42                                 cout<<"  "<<k<<" ";
 43                                 else
 44                                 {
 45                                     cout<<"  "<<k;
 46                                 }
 47                                 bj++;
 48                                 if(bj==7)
 49                                 {
 50                                     cout<<endl;
 51                                     bj=0;    
 52                                 }
 53                             }
 54                                 else
 55                                 {
 56                                 if(bj!=6&&k!=rmonth[j])
 57                                 cout<<" "<<k<<" ";
 58                                 else
 59                                 {
 60                                     cout<<" "<<k;
 61                                 }
 62                                 if(k==rmonth[j])return 0;
 63                                 bj++;
 64                                 if(bj==7)
 65                                 {
 66                                     cout<<endl;
 67                                     bj=0;    
 68                                 }
 69                             }
 70                             }
 71                             return 0;
 72                         }//边界条件 
 73                         dow++;
 74                         if(dow==8)
 75                         dow=1;
 76                         
 77                 }
 78                  
 79             }
 80         }//闰年 
 81         else
 82         {
 83             for(int j=1;j<=12;j++)
 84             {
 85                 for(int k=1;k<=month[j];k++)
 86                 {
 87                     if(i==enyear&&j==enmonth)
 88                         {
 89                             int bj=0;
 90                             cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
 91                             for(int i=0;i<=dow-1;i++)
 92                             {
 93                                 if(dow==7)break;
 94                                 if(bj==6)break;
 95                                 bj++;
 96                                 for(int i=1;i<=3;i++)
 97                                 cout<<" ";
 98                                 cout<<" ";
 99                             }//确定第一个数的位置 
100                             for(int k=1;k<=month[j];k++)
101                             {
102                             if(k<10)
103                             {
104                                 if(bj!=6&&k!=month[j])
105                                 cout<<"  "<<k<<" ";
106                                 else
107                                 {
108                                     cout<<"  "<<k;
109                                 }
110                                 bj++;
111                                 if(bj==7)
112                                 {
113                                     cout<<endl;
114                                     bj=0;    
115                                 }
116                             }
117                             else
118                             {
119                                 if(bj!=6&&k!=month[j])
120                                 cout<<" "<<k<<" ";
121                                 else
122                                 {
123                                     cout<<" "<<k;
124                                 }
125                                 bj++;
126                                 if(bj==7)
127                                 {
128                                     cout<<endl;
129                                     bj=0;    
130                                 }
131                                 if(k==month[j])return 0;
132                             }
133                             }
134                             return 0;
135                         }//边界条件 
136                         dow++;
137                         if(dow==8)
138                         dow=1;
139                 }       
140                      
141                 
142                 
143                      
144     }
145                 
146 }
147 }
148 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法与数据结构

数据结构 链表(循环)

#include<stdio.h> #include<malloc.h> #include<stdlib.h> //函数状态码定义 #define TRUE ...

20570
来自专栏猿人谷

单链表反转的分析及实现

我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1...

1.5K100
来自专栏null的专栏

挑战数据结构和算法面试题——二叉搜索树的后序遍历

题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。 ? 分析: 根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是...

36540
来自专栏青玉伏案

算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)

前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容。本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使...

288100
来自专栏C/C++基础

二叉树构建,先序,中序,后序遍历(以及非递归实现),广度优先遍历

二叉树是一类简单而又重要的树形结构,在数据的排序、查找和遍历方面有着广泛的应用。由于其清晰的结构,简单的逻辑,广泛的应用和大量的指针操作,在面试过程屡见不鲜,快...

1.6K10
来自专栏Java3y

二叉树就这么简单

一、二叉树就是这么简单 本文撇开一些非常苦涩、难以理解的概念来讲讲二叉树,仅入门观看(或复习)…. 首先,我们来讲讲什么是树: 树是一种非线性的数据结构,相对于...

54280
来自专栏kevindroid

leetcode538 Convert BST to Greater Tree

17640
来自专栏大史住在大前端

野生前端的数据结构基础练习(7)——二叉树

一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称...

9120
来自专栏Ryan Miao

ArrayList源码阅读

前言 数组是我们最常用最简单的数据结构,Java里对数组做了一个简单的包装,就是ArrayList,提供自动扩容的功能。 最常用法 list在我们日常代码中最为...

29080
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

244100

扫码关注云+社区

领取腾讯云代金券