2 条题解
-
0
发表一个比楼下更为简便的题解。
在写这道题的时候,我发现这样写一长串逻辑表达式太烦人了。于是我开始考虑如何进行优化。
不难发现回文日期实际上就只有那么几个。
于是我们可以打表。
但我实际上不是那么写的,因为打表更烦人了!
因为回文数的性质是前后颠倒一致,于是开始考虑枚举月份和日期来优化代码。于是得到这样一份简洁明了的代码:
#include<bits/stdc++.h> using namespace std; int i,j,n,m,a,b,c,sum,ans; int s[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //为了方便考虑直接枚举月和日,根据月和日倒推出年 int main() { scanf("%d%d",&n,&m); for (i=1;i<=12;i++) for (j=1;j<=s[i];j++) { c=(j%10)*1000+(j/10)*100+(i%10)*10+(i/10); sum=c*10000+i*100+j;//将日期化为整数计算 if (sum<n||sum>m) continue; ans++; } printf("%d",ans); return 0; }
完结撒花
-
0
#include<bits/stdc++.h> using namespace std; long long q,w,e,r,t,y,u,i,o,p,s,f,g,h,j,k,l,m,n,v,x,z,kk; char b[1000][1000]; int a[1000][1000]; int c[1000]; int d[1000]; string ss; int main() { cin>>n>>m; for(i=n;i<=m;i++) { if(i%100>31) { i-=31; i+=100; } if(i%100>30&&(i/100%100==2||i/100%100==4||i/100%100==6||i/100%100==9||i/100%100==11)) { i-=30; i+=100; } if(i%100>29&&i/100%100==2) { i-=29; i+=100; } if(i%100>28&&(i/100%100==2&&i/10000%4!=0&&(i/10000%4==0&&i/10000%100==0))) { i-=28; i+=100; } if(i/100%100>12) { i-=1200; i+=10000; } if(i/10000000%10==i/1%10&&i/10000%10==i/1000%10&&i/100000%10==i/100%10&&i/1000000%10==i/10%10) { k++; } } cout<<k; return 0; }
- 1
信息
- ID
- 160
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 25
- 已通过
- 10
- 上传者