[蓝桥杯][2017年第八届真题]日期问题

水题~。

const int N=1e5+10;
struct Node
{
    int yy,mm,dd;
    bool operator<(const Node &W) const 
    {
        if(yy != W.yy) return yy < W.yy;
        if(mm != W.mm) return mm < W.mm;
        return dd < W.dd;
    }
};
int month[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int a,b,c;
set<Node> res;

bool isLeap(int year)
{
    return (year % 4 == 0 && year % 100) || year % 400 == 0;
}

void check(int yy,int mm,int dd)
{
    if(yy < 60) yy=2000+yy;
    else yy=1900+yy;

    if(mm == 0 || mm > 12) return;
    bool isleap=isLeap(yy);
    if(dd == 0 || dd > month[isleap][mm]) return;
    
    res.insert({yy,mm,dd});
}

int main()
{
    scanf("%d/%d/%d",&a,&b,&c);
    
    check(a,b,c);//年月日
    check(c,a,b);//月日年
    check(c,b,a);//日月年
    
    for(auto t:res)
        printf("%d-%02d-%02d\n",t.yy,t.mm,t.dd);
    //system("pause");
    return 0;
}

posted @ 2021-03-27 20:25  Dazzling!  阅读(63)  评论(0编辑  收藏  举报