求大神指导c++

P2010 [NOIP2016 普及组] 回文日期

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

我做了六十分


|