nefuoj

编程入门 行业动态 更新时间:2024-10-27 10:29:43

nefuoj

nefuoj

description

<span style="font-family:SimSun;font-size:18px;">给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。只有闰年有2月29日,满足以下一个条件的年份为闰年:1. 年份能被4整除但不能被100整除2. 年份能被400整除</span>

input

<span style="font-family:SimSun;font-size:18px;">第一行为一个整数T,表示数据组数。之后每组数据包含两行。每一行格式为&quot;month day, year&quot;,表示一个日期。month为{&quot;January&quot;, &quot;February&quot;, &quot;March&quot;, &quot;April&quot;, &quot;May&quot;, &quot;June&quot;, &quot;July&quot;, &quot;August&quot;, &quot;September&quot;, &quot;October&quot;, &quot;November&quot; , &quot;December&quot;}中的一个字符串。day与year为两个数字。数据保证给定的日期合法且第一个日期早于或等于第二个日期。</span>

output

<span style="font-family:SimSun;font-size:18px;">对于每组数据输出一行,形如&quot;Case #X: Y&quot;。X为数据组数,从1开始,Y为答案。
</span>

sample_input

<span style="font-family:SimSun;font-size:18px;">2
January 12, 2012
March 19, 2012
August 12, 2899
August 12, 2901</span>

sample_output

<span style="font-family:SimSun;font-size:18px;">Case #1: 1
Case #2: 0</span>


题解:因为这是14届大一的综合赛的题,所以我就顺便做了一下,这一道题是第一题,水题,模拟就行了,就是有点麻烦。。


code:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int isrun(int n)//runnian
{
    if(n%400==0) return 1;
    if(n%4==0&&n%100!=0)
    return 1;
    return 0;
}
int main()
{
    char month[12][15]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"};
    int t;
    char m1[15],m2[15];
    int d1,d2,y1,y2,mn1,mn2;
    int ans;
    int c=1;
    cin>>t;
    while(t--)
    {
        ans=0;
        scanf("%s %d,%d",m1,&d1,&y1);
        getchar();
        scanf("%s %d,%d",m2,&d2,&y2);
        getchar();
        printf("Case #%d: ",c++);
        for(int i=0; i<12; i++)
        {
            if(strcmp(m1,month[i])==0)
            {
                mn1=i+1;
            }
            if(strcmp(m2,month[i])==0)
            {
                mn2=i+1;
            }
        }
        //cout<<mn1<<' '<<mn2;//
        if(y1==y2&&mn1<=2&&mn2>2)//判断同一年不同月份;
        {
            isrun(y1)? cout<<"1"<<endl: cout<<"0"<<endl;
            continue;
        }
        if(y1==y2&&mn1<=2&&mn2==2)//判断同一年同一月份;
        {
            d2==29? cout<<"1"<<endl: cout<<"0"<<endl;
            continue;
        }
        if(y1<y2)//判断不同年;
        {
            if(mn1<=2&&isrun(y1))
            ans=1;
            else
            ans=0;
            for(int i=y1+1; i<y2; i++)
            if(isrun(i)) ans++;
            if(isrun(y2)&&(mn2>2||d2==29))
            ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}


下边是当初比赛公布出来的代码,不是我写的哦~~

code2:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char mon[12][10]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"};
int main()
{
    int t,T=1;
    scanf("%d",&t);
    char month[2][10],c;
    int m,d,y,m1,d1,y1;
    int cnt;
    while(t--)
    {
        cnt=0;
        scanf("%s",month[0]);
        scanf("%d%c%d",&d,&c,&y);
        scanf("%s",month[1]);
        scanf("%d%c%d",&d1,&c,&y1);
        for(int i=0;i<12;i++)
          if(strcmp(month[0],mon[i])==0)
          {
              m=i+1;
              break;
          }
        for(int i=0;i<12;i++)
          if(strcmp(month[1],mon[i])==0)
          {
              m1=i+1;
              break;
          }
        if(y==y1)
        {
            if((y%400==0)||(y%4==0&&y%100!=0))
              if((m==1||(m==2&&d<=29))&&(m1>2||(m1==2&&d1==29)))
                cnt++;
        }
        else
        {
            if((y%400==0)||(y%4==0&&y%100!=0))
              if((m==1)||(m==2&&d<=29)) cnt++;
            cnt+=(y1-1)/4-(y1-1)/100+(y1-1)/400-(y/4-y/100+y/400);
            if((y1%400==0)||(y1%4==0&&y1%100!=0))
              if(m1>2||(m1==2&&d1==29)) cnt++;
        }
        printf("Case #%d: %d\n",T++,cnt);
    }
    return 0;
}

更多推荐

nefuoj

本文发布于:2024-02-11 03:55:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678999.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:nefuoj

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!