syanoeclipse @ 2021-10-13 20:59:32
代码见二楼
评测
by syanoeclipse @ 2021-10-13 20:59:50
#include <iostream>
using namespace std;
bool leapyear(int x)
{
int y=x/10000;
if(x%400==0){return true;}
if(x%100==0){return false;}
if(x%4==0){return true;}
return false;
}
bool fullday(int x)
{
int m=(x/100)%100;
int d=x%100;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return (d==31);
case 4:
case 6:
case 9:
case 11:
return (d==30);
case 2:
return ((leapyear(x) and d==29) or (!leapyear(x) and d==28));
}
}
bool fullmonth(int x)
{
int m=(x/100)%100;
return (m==12);
}
int nextdate(int x)
{
int y=x/10000;
int m=(x/100)%100;
int d=x%100;
if(fullday(x))
{
if(fullmonth(x))
{
y+=1;
m=1;
d=1;
}
else
{
m+=1;
d=1;
}
}
else
{
d+=1;
}
return (10000*y + 100*m + d);
}
bool reverse(int x)
{
bool ra=(x/10000000)==(x%10);
bool rb=(x/1000000)%10==(x%100)/10;
bool rc=(x/100000)%10==(x%1000)/100;
bool rd=(x/10000)%10==(x%10000)/1000;
return ra and rb and rc and rd;
}
int main()
{
int a,b,ans=0;
cin>>a>>b;
for(int i=a;i<=b;i=nextdate(i))
{
if(reverse(i))
{
ans++;
}
}
cout<<ans;
return 0;
}
by Trafford1894 @ 2021-10-13 21:06:18
其实这题有简便思路,就是求出所有回文日期,再判断是否在题目范围之内。
by syanoeclipse @ 2021-10-13 21:07:56
@Panchromium 囸,这也行
by Comintern @ 2021-10-13 21:13:48
@开普勒的梦
bool leapyear(int x)
{
int y=x/10000;
if(y%400==0){return true;}
if(y%100==0){return false;}
if(y%4==0){return true;}
return false;
}
这里x要改成年份(y)
by ckk11288 @ 2021-10-13 21:28:12
我只有个超级暴力的考场代码,你可以看看
//date暴力做法,思路比较好懂
#include<bits/stdc++.h>
using namespace std;
bool run(int d)//闰年判断
{
d=d/10000;//d/10000为年份
if(d%4==0)
{
if(d%100==0)
{
if(d%400==0)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
else
{
return false;
}
}
bool check(int n)//判断日期是否存在
{
if(n/100%100>12||n%100>31)//月份超过12,日期超过31直接返回false
{
return false;
}
else//判断月份对应的日期是否符合要求,n/100%100为月份,n%100为日期
{
if(n/100%100==1||n/100%100==3||n/100%100==5||n/100%100==7||n/100%100==8||n/100%100==10||n/100%100==12)
{
if(n%100<=31)
{
return true;
}
else return false;
}
if(n/100%100==4||n/100%100==6||n/100%100==9||n/100%100==11)
{
if(n%100<=30)
{
return true;
}
else return false;
}
if(n/100%100==2)//特判2月
{
if(run(n))//如果该年份为闰年
{
if(n%100<=29)//二月上限为29
{
return true;
}
else
{
return false;
}
}
else//如果不是闰年
{
if(n%100<=28)//二月上限为28
{
return true;
}
else
{
return false;
}
}
}
}
}
bool huiwen(int f)//判断回文
{
int sum=0,xum=f;
while(f>0)//数字反转思路
{
sum=sum*10+f%10;
f/=10;
}
if(sum==xum)//如果反转前后值相等,返回true
{
return true;
}
else//不相等,返回false
{
return false;
}
}
int main()
{
//freopen("date.in","r",stdin);
//freopen("date.out","w",stdout);考试时把“//”删掉
int i,n,m,c=0;
cin>>n>>m;
for(i=n;i<=m;i++)
{
if(check(i)&&huiwen(i))//枚举,符合要求就结果+1
{
c++;
}
}
cout<<c<<endl;
return 0;
}
by Mr_Terminator @ 2021-10-13 21:30:34
艹还以为是神贴
by syanoeclipse @ 2021-10-13 21:38:41
@幽灵2 哪那么多神贴