注意按照定义:
贪心没什么好说的
- 01背包
- 多重背包
- 最大连续子串和
bool judge(int year){
return (year%4==0&&year%100!=0) || year%400==0;
}
string dayOfTheWeek(int day, int month, int year) {
vector<string> v({"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"});
vector<int> mm({31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31});
int y = 1970;
int m = 1;
int d = 1;
int now = 4;
int delta = 0;
for(int i=y; i<year; ++i){
if(judge(i)){
delta += 366;
}
else{
delta += 365;
}
}
for(int i=1; i<month; ++i){
delta += mm[i-1];
}
delta += day;
if(judge(year) && month>2) ++delta;
return v[(now + delta - 1)%7];
}
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。(注意对应0对应sunday)
string dayOfTheWeek(int day, int month, int year) {
vector<string> v({"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"});
if(month<3){
--year;
month += 12;
}
int c = year / 100;
int y = year - c*100;
int w = (c/4-2*c+y+y/4+13*(month+1)/5+day-1)%7;
cout<<w<<endl;
return v[(w+7)%7];
}
bool judge(int year){
return (year%4==0&&year%100!=0) || year%400==0;
}