d3NtMDAw @ 2016-12-11 21:08:45
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int ans=0;
int d1,d2;
cin>>d1>>d2;
int y1,y2;
int e1,e2;
y1=d1/10000;
e1=d1%10000;
e2=d2%10000;
y2=d2/10000;
int i,j,k,a2,a1,a3,a4,a;
for(i=y1;i<=y2;i++)
{
k=i;
a4=k%10;
k=k/10;
a3=k%10;
k=k/10;
a2=k%10;
k=k/10;
a1=k;
a=a1+a2*10+a3*100+a4*1000;
if((a3==0&&a4==0)||a4>1)
continue;
if(a4==1&&a3>=3)
continue;
if(a2>3)
continue;
if(a2==3&&a1>1)
continue;
if(a3<7&&a3%2==0&&a1>0&&a2==3)
continue;
if((a3==11||a3==9)&&a1>0&&a2==3)
continue;
if(i==y1&&a<e1)
continue;
if(i==y2&&a>e2)
continue;
ans++;
}
cout<<ans<<endl;
//system("pause");
return 0;
}
by 樱墨抄 @ 2016-12-11 22:13:57
可以打表,但是会有数据未涉及道。
首先判断是否是闰年,还要排除个别年份问题,你的做法 :
if((a3==0&&a4==0)||a4>1)
continue;
if(a4==1&&a3>=3)
continue;
if(a2>3)
continue;
if(a2==3&&a1>1)
continue;
if(a3<7&&a3%2==0&&a1>0&&a2==3)
continue;
if((a3==11||a3==9)&&a1>0&&a2==3)
continue;
if(i==y1&&a<e1)
continue;
if(i==y2&&a>e2)
continue;
中有问题。你要明确continue的概念,&&和||的概念。 你先修改。
提示:你可以先用一个子程序判断回文数,再用子程序判断是否闰年,最后合起来。
其实比较简短的。
by 樱墨抄 @ 2016-12-11 22:17:41
还有种枚举,你看一下程序:
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<vector>
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;
}
by 卑微的绝望 @ 2016-12-12 13:19:09
我做了六十分