# include<iostream>
# include<stdio.h>
# include<stdlib.h>
using namespace std;
int monthNum[13][2] = {
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31
};
//判断平年闰年,平年返回0,闰年返回1
int judge(int year){
if((year%400==0)||(year%4==0&&year%100!=0)){
return 1;
}
return 0;
}
struct Date{
int year;
int month;
int day;
void nextDay(){
day++;
int k = judge(year);
if(day>monthNum[month][k]){
day = 1;
month++;
if(month>12){
month=1;
year++;
}
}
}
};
//存储日期到0000年1月1日之间的间距
int distance1[5001][13][32];
void initDistance(){
Date d;
int dis = 0;
d.year = 0;
d.month = 1;
d.day = 1;
distance1[d.year][d.month][d.day] = dis;
while(d.year<5001){
d.nextDay();
dis++;
distance1[d.year][d.month][d.day] = dis;
}
}
main(){
int year1,month1,day1;
int year2,month2,day2;
int result;
initDistance();
while(scanf("%4d%2d%2d",&year1,&month1,&day1)!=EOF){
scanf("%4d%2d%2d",&year2,&month2,&day2);
result = abs(distance1[year1][month1][day1] - distance1[year2][month2][day2]) + 1;
cout<<result<<endl;
}
}
注:解决这类区间问题都有一个统一的思想——把原区间问题统一到起点确定的统一问题上去。
# include<iostream>
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
using namespace std;
char month[13][20] = {
"",
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
char d[8][20]{
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday"
"Friday",
"Saturday"
};
int monthNum[13][2] = {
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31
};
//判断平年闰年,平年返回0,闰年返回1
int judge(int year){
if((year%400==0)||(year%4==0&&year%100!=0)){
return 1;
}
return 0;
}
struct Date{
int year;
int month;
int day;
void nextDay(){
day++;
int k = judge(year);
if(day>monthNum[month][k]){
day = 1;
month++;
if(month>12){
month=1;
year++;
}
}
}
};
//存储日期到0000年1月1日之间的间距
int distance1[5001][13][32];
void initDistance(){
Date d;
int dis = 0;
d.year = 0;
d.month = 1;
d.day = 1;
distance1[d.year][d.month][d.day] = dis;
while(d.year<5001){
d.nextDay();
dis++;
distance1[d.year][d.month][d.day] = dis;
}
}
main(){
initDistance();
int day,year;
char m[20];
int i;
while(cin>>day>>m>>year){
for(i = 0;i<=13;i++){
if(strcmp(m,month[i])==0){
break;
}
}
int r = distance1[year][i][day] - distance1[2021][6][21];
int today = 1;
int days = today + r;
int k = (days%7 + 7)%7;
cout<<d[k]<<endl;
}
}