这是一个标准的日期处理问题 模版代码如下
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair long long
#define endl "\n"
int sy=2000,sm=1,sd=1;
int ey=2024,em=4,ed=13;
int cy,cm,cd;
int nums[10]={13,1,2,3,5,4,4,2,2,2};
int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ans=0;
void date(){
cy=sy;
cm=sm;
cd=sd;
while(1){
//定一个死循环来
//这里放置对这一天的处理代码
string s;
s=s+to_string(cy);
if(cm>=10) s=s+to_string(cm);
else s=s+'0'+to_string(cm);
if(cd>=10) s=s+to_string(cd);
else s=s+'0'+to_string(cd);
int sum=0;
for(int i=0;i<s.size();i++){
sum+=nums[s[i]-'0'];
}
if(sum>50) ans++;
//处理完这一天之后 判断是否不需要继续了 显然这个的先后取决于最后一天是否处理
if(cy==ey&&cm==em&&cd==ed){
break;
}
//进入下一天 仅需调一下二月的情况
if(cy%400==0||(cy%4==0&&cy%100!=0)){
month_day[2]=29;
}else month_day[2]=28;
cd++;
if(cd>month_day[cm]){
cm++;
cd=1;
}
if(cm>12){
cm=1;
cy++;
}
}
}
void solve(){
date();
cout<<ans<<endl;
}
signed main() {
int t = 1;
// cin>>t;
while (t--) {
solve();
}
}
0 回复
0 转发
0 喜欢
3 阅读



