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 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。