蓝桥杯日期问题c++找bug


#include <bits/stdc++.h>
using namespace std;
int a[3],v[1000000] //标记,排除相同的输出;
int md(int y,int m,int d){//检查是否符合条件
    int f=0;
    if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>0&&d<=31){
        f=1;
    }
    else if(m==2&&d>0&&d<=(((y%4==0)||(y==0))?29:28)){
        f=1;
    }
    else if((m==11||m==9||m==6||m==4)&&d<=30&&d>0)f=1;
    return f;
}
int j(int x,int y,int z){//用于标记
    return a[x]*10000+a[y]*100+a[z];
}
string p(int x){//to_string()
    string a=to_string(x/10),b=to_string(x%10);
    return a+b;
}
int main(){
    scanf("%d/%d/%d",&a[0],&a[1],&a[2]);
    sort(a,a+3);
    string x[3];
    if(md(a[0],a[1],a[2])&&v[j(0,1,2)]==0){//一一判断
        v[j(0,1,2)]++;
        x[0]+=(a[0]>=60)?"19":"20";
        x[0]+=p(a[0])+"-"+p(a[1])+"-"+p(a[2]);
    }
    if(md(a[2],a[0],a[1])&&v[j(2,0,1)]==0){
        v[j(2,0,1)]++;
        x[1]+=(a[2]>=60)?"19":"20";
        x[1]+=p(a[2])+"-"+p(a[0])+"-"+p(a[1]);
    }
    if(md(a[2],a[1],a[0])&&v[j(2,1,0)]==0){
        v[j(2,1,0)]++;
        x[2]+=(a[2]>=60)?"19":"20";
        x[2]+=p(a[2])+"-"+p(a[1])+"-"+p(a[0]);
    }
    sort(x,x+3);
    for(int i=0;i<3;++i)
        if(x[i].size()==10)cout<<x[i]<<endl;
    return 0;
}

int a[3],v[1000000]; //缺分号
int md(int y,int m,int d){//检查是否符合条件
    int f=0;
    if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>0&&d<=31){
        f=1;
    }
    else if(m==2&&d>0&&d<=(((y%4==0)||(y==0))?29:28)){
        f=1;
    }
    else if((m==11||m==9||m==6||m==4)&&d<=30&&d>0)f=1;
    return f;
}
int j(int x,int y,int z){//用于标记
    return a[x]*10000+a[y]*100+a[z];
}

string p(int x){//to_string()

    string a=to_string(x/10),b=to_string(x%10);//to_string没有定义
    string b="";
    return a+b;//b没有定义
}