傻新求救

P2010 [NOIP2016 普及组] 回文日期

steveyang137 @ 2019-08-24 15:35:07

献上代码

#include<iostream>
using namespace std;

int date1,date2;
int total=0;
int m1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int m2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool IsDate(int date);
bool IsRe(int date);
int pow(int a);

int main()
{
    cin>>date1>>date2;

    for(int i=date1;i<=date2;i++)
    {
        if(!IsDate(i))
        {
            continue;
        }
        if(IsRe(i))
        {
            total++;
        }
    }

    cout<<total;

    return 0;
}

bool IsDate(int date)
{
    int year=(date/pow(4));
    date-=year*10000;
    int month=(date/pow(2));
    date-=year*100;
    int day=date;

    if(year%4==0 && year%100!=0)
    {
        if(year%400==0)
        {
            return false;
        }
        if(month>12 && month<1)
        {
            return false;
        }
        if(day>m1[month])
        {
            return false;
        }
    }
    else if(year%400==0)
    {
        if(month>12 && month<1)
        {
            return false;
        }
        if(day>m1[month])
        {
            return false;
        }
    }
    else
    {
        if(month>12 && month<1)
        {
            return false;
        }
        if(day>m2[month])
        {
            return false;
        }
    }
    return true;
}

bool IsRe(int date)
{
    int a,b;
    for(int i=0;i<4;i++)
    {
        a=(date/pow(i))%10;
        b=(date/pow(7-i))%10;
        if(a!=b)
        {
            return false;
        }
    }
    return true;
}

int pow(int a)
{
    int r=1;
    for(int i=1;i<=a;i++)
    {
        r*=10;
    }
    return r;
}

得了60分。\ 怎么弄啊!!!\ \ p.s.有人知道管理员为什么不放测试数据吗?


by steveyang137 @ 2019-08-24 15:36:47

'\'当换行用,因为我预览的时候\相当于换行符


by LZoey @ 2019-08-24 15:48:19

测评结果


by LZoey @ 2019-08-24 15:51:19

测试点2
输入
10000101
99991231
输出
331

你可以根据提交结果下载测试点数据


|