HDU 1308 日历打印加强版,没有勇气自己做,下次再来。
2012-09-15 18:52
465 查看
代码中对输入输出的操作符重载要学习。
这个题目的主要问题是干扰信息太多了。1. 按照英美的日历的标准就是1752年之后算闰年的方法才改变的。2. 要知道某一天是星期几,必须知道 1.1.1 是星期几
原文地址:http://hi.baidu.com/nicker2010/item/d0c3cd2a7caf27c4ddf69a10
这个题目的主要问题是干扰信息太多了。1. 按照英美的日历的标准就是1752年之后算闰年的方法才改变的。2. 要知道某一天是星期几,必须知道 1.1.1 是星期几
#include <iostream> #include <string> using namespace std; const string MonthName[]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; const string WeekName[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; const int DayNum[]={31,0,31,30,31,30,31,31,30,31,30,31}; bool isLeap(int y) { if(y>1752) return (y%400==0 || ((y%4==0)&&(y%100!=0))); else return y%4==0; } int YearDays(int y) { return (isLeap(y) ? 366 : 365); } int MonthDays(int y,int m) { if(m != 2) return DayNum[m-1]; else //m==2 { if(isLeap(y)) return 29; else return 28; } } bool isValid(int y, int m, int d) { if(m<1 || m>12) return false; if(d<1 || d>MonthDays(y,m)) return false; if(y==1752 && m==9 && d>=3 && d<=13) return false; return true; } struct Date { int Y,M,D; Date():Y(0),M(0),D(0){} Date(int y,int m,int d):Y(y),M(m),D(d){} }; istream& operator>>(istream& in, Date& date) { in>>date.M>>date.D>>date.Y; return in; } ostream& operator<<(ostream& out, const Date& date) { out<<MonthName[date.M-1]<<' '<<date.D<<", "<<date.Y; return out; } bool operator<(const Date& lh,const Date& rh) { if(lh.Y != rh.Y) return (lh.Y < rh.Y); else { if(lh.M != rh.M) return (lh.M < rh.M); else return (lh.D < rh.D); } } int main() { Date date; while(cin>>date) { if(date.Y==0 && date.M==0 && date.D==0) break; if(!isValid(date.Y,date.M,date.D)) { cout<<date.M<<'/'<<date.D<<'/'<<date.Y<<" is an invalid date.\n";continue; } int days=-1,i; //1 1 1到底是星期几? for(i=1;i<date.Y;++i) days += YearDays(i); for(i=1;i<date.M;++i) days += MonthDays(date.Y, i); days += (date.D-1); if(Date(1752,9,2) < date) days -= 11; cout<<date<<" is a "<<WeekName[days%7]<<endl; } return 0; }
原文地址:http://hi.baidu.com/nicker2010/item/d0c3cd2a7caf27c4ddf69a10
相关文章推荐
- 恨自己没有勇气
- 过自己骄傲的生活,或者,有勇气重头再来
- 做不了豹子,就做水牛,为什么没有正视自己的勇气
- [HDU] 1074 Doing Homework (NP性质的DP,远没有过去的自己写得好了)
- 导出 delphi 的dll 函数名,没有参数,先记下,下次再来研究.
- 你连追求自己喜欢的事物与人的勇气都没有,你注定是个失败者。
- 关于云打印业务,为什么没有什么好的初创出现?
- 2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- java程序打印输出本月日历
- 一般比较少见的LINUX安全加强文档(自己在单位用)
- 一个有意思的东东 linux c打印自己的程序
- HDU 2222 Keywords Search(AC自己主动机)
- hdu FatMouse's Speed(DP)(打印路径)
- hdu-1325 & poj-1308 Is It A Tree?
- hdu 5284 wyh2000 and a string problem(没有算法,仅仅考思维,字符数组得开20万,不然太小了)
- 自己开发基于Web的打印控件,真正免费不是共享
- shell 中参数化各种自己写的函数,以便下次方便调用
- 打印日历
- HDU 1166再来一个基础线段树
- JAVA 按年月打印日历 Calendar的简单使用