返回题解分享
讨论 / 题解分享/ 帖子详情

艺术与篮球(结果填空) - 题解

这是一个标准的日期处理问题 模版代码如下

#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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!