ZOJ 3326 An Awful Problem 模拟

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3751

题意:给出一对年月日,计算月是素数并且日是素数的个数;

模拟题,自己把自己绕晕了好几次 以后做题要多思考,理清思路

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
bool month(int m)
{
    if(m==2||m==3||m==5||m==7||m==11)
    return 1;
    return 0;
}
bool day(int t)
{
    if(t==2||t==3||t==5||t==7||t==11||t==13||t==17
       ||t==19||t==23||t==29||t==31)
       return 1;
    return 0;
}

bool Ly(int x)
{
    if(x%400==0||(x%100!=0&&x%4==0))
     return 1;
    return 0;
}
int main()
{
    int CASE,SUM;
    int i,a,b,c,a1,b1,c1;
    int L_y=53,N_y=52;//11 10 9
    scanf("%d",&CASE);
    while(CASE--)
    {
      SUM=0;
      scanf("%d%d%d%d%d%d",&a,&b,&c,&a1,&b1,&c1);
      if(a==a1)
      {
          if(b==b1&&month(b))
          {
              for(i=c;i<=c1;i++)
              {
                  if(day(i))SUM++;
              }
          }
           if(b<b1)
           {
               for(i=b;i<b1;i++)
               {
                   if(month(i))
                   {
                      if(i==2)
                      {
                          if(Ly(a))SUM+=10;//瑞年二月
                          else SUM+=9;
                      }
                      else if(i==11)SUM+=10;
                       else SUM+=11;
                   }
               }

               if(month(b))
               for(i=2;i<c;i++)
               {
                   if(day(i))SUM--;
               }
                if(month(b1))
                for(i=2;i<=c1;i++)
                {
                    if(day(i))SUM++;
                }
           }
      }
      if(a<a1)
      {
          for(i=a+1;i<a1;i++)
          {
              if(Ly(i))
              SUM+=L_y;
              else SUM+=N_y;
          }
          for(i=b;i<=11;i++)
          {
              if(month(i))
              {
                  if(i==2)
                  {
                      if(Ly(a))SUM+=10;//瑞年二月
                      else SUM+=9;
                  }
                  else if(i==11)SUM+=10;
                  else SUM+=11;
              }
          }
          if(month(b))//减去天
          for(i=1;i<c;i++)
          {
             if(day(i))
             SUM--;
          }
          for(i=2;i<b1;i++)
          {
               if(month(i))
              {
                  if(i==2)
                  {
                      if(Ly(a1))SUM+=10;//瑞年二月
                      else SUM+=9;
                  }
                  else if(i==11)SUM+=10;
                  else SUM+=11;
              }
          }
          if(month(b1))
          for(i=2;i<=c1;i++)
          {
              if(day(i))SUM++;
          }
      }
      printf("%d\n",SUM);
    }
    return 0;
}

  

posted @ 2012-03-31 20:55  快乐.  阅读(251)  评论(0编辑  收藏  举报