蓝桥杯_回文日期【第十一届】【省赛】【B组】_日期问题

蓝桥杯_回文日期【第十一届】【省赛】【B组】_日期问题_第1张图片   蓝桥杯_回文日期【第十一届】【省赛】【B组】_日期问题_第2张图片

// 
#include
using namespace std;
#define is_leap(y) ( y%4==0 && y%100 || y%400==0 )
                        // 1  2  3  4  5  6  7  8  9 10 11 12
const int month_day[]={ 0,31,28,31,30,31,30,31,31,30,31,30,31 };

int year,month,day;

inline bool f( const string& s )    // 不可以连等 
{
    if( s[0]==s[2] && s[1]==s[3] )  // 已满足回文 
        return true;
    return false;
}
// ABAB BA BA
// 0101 10 10
// 0123 45 67

bool error()        // true is error
{                   // month==0 || day==0 (x)
    if( !( month>=1 && month<=12 ) ) return true;

    int t=month_day[month];
    if( is_leap(year) ) t++;
    if( !( day>=1 && day<=t ) ) return true;
    
    return false;
}

int main()
{
    stringstream ss; string s,t; int n,flag;

    while( cin>>n )
    {
        flag=1;
        while( n++ )	// ( a=="0" || b=="0" ) 
        {
            year=n/10000; month=n%10000/100; day=n%100;
            if( error() ) continue;

            ss.clear(); ss.str("");
            ss<>s;

            string re=s;                    // 直接用翻转函数判等
            reverse( re.begin(),re.end() );

            if( re==s )
            {
                if( flag ) { cout<

你可能感兴趣的:(蓝桥杯_题库,蓝桥杯)