特定日期计算

来源:互联网 发布:深圳华傲数据技术贷款 编辑:程序博客网 时间:2024/06/05 15:34

/*T1 特定日期计算
时间限制:1000ms
【问题描述】
给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期、终止日期)。
满足以下一个条件的年份为闰年,只有闰年有2月29日:
a、年份能被4整除但不能被100整除
b、年份能被400整除
【标准输入】
有多组测试数据,第一行为一个整数T,表示测试数据组数。
之后每组数据包含两行。每一行格式为”month day, year”,表示一个日期。month为{“January”, “February”, “March”, “April”, “May”, “June”, “July”, “August”,
“September”, “October”, “November” , “December”}中的一个字符串。day与year为两个数字。
数据保证给定的日期合法且第一个日期早于或等于第二个日期。
【标准输出】
对于每组数据输出一行,形如”Case #X: Y”。X为测试数据组数的序号,从1开始;Y为答案。
【约束条件】
1 ≤ T ≤ 550,1900 ≤ year ≤ 3000
【样例输入】
4
January 12, 2012
March 19, 2012
August 12, 2899
August 12, 2901
August 12, 2000
August 12, 2005
February 29, 2004
February 29, 2012
【样例输出】
Case #1: 1
Case #2: 0
Case #3: 1
Case #4: 3*/

#include<iostream>  #include<cstdio>  #include<cstring>  #include<cstdlib>  #include<cmath>  #include<cstdlib>  #include<cctype>  #include<vector>  #include<queue>  #include<map>  #include<set>  #include<string>  using namespace std;  const int N=1e5+10;  bool isyear(int x)  //判断是否为闰年 {      if((x%4==0&&x%100!=0)||x%400==0)          return 1;      return 0;  }  int main()  {       int t;      cin>>t;      char ss[12][12]={"January","February","March","April","May","June","July","August","September","October","November","December"};      for(int kase=1;kase<=t;kase++)      {          int a,a1,b,b1,c,c1;          char s[100],s1[100];          scanf("%s %d, %d",s,&b,&c);          scanf("%s %d, %d",s1,&b1,&c1);         for(int i=0;i<12;i++)          {              if(!strcmp(s,ss[i]))                  a=i+1;             if(!strcmp(s1,ss[i]))                 a1=i+1;          }          int sum=0;          if(c==c1&&isyear(c)&&a<=2&&((a1==2&&b1==29)||a1>=3))             sum=1;         if(c!=c1&&(c1-c)<=1002)         {             for(int i=c+1;i<c1;i++)             if(isyear(i))             sum++;             if(isyear(c)&&a<=2)                 sum++;             if(isyear(c1)&&((a1==2&&b1==29)||a1>=3))                 sum++;         }         if(c!=c1&&(c1-c)>1002)         {              int t1=c/4-c/100+c/400;                                                                                                                                                                                                                                                                                           int t2=c1/4-c1/100+c1/400;              sum=sum+t2-t1;              if(isyear(c)&&a<=2)                  sum++;              if(isyear(c1)&&(a1<=2&&b1!=29))                  sum--;          }        printf("Case #%d: %d\n",kase,sum);    }    return 0;  }  
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子特别懒不爱动又胖怎么办 微信的聊天记录被限制了怎么办 门面租金交了一年对方不租了怎么办 离职后社保怎么办 无忧保专业可靠 淘宝店铺被投诉到监管局怎么办 淘宝买家每天都来店铺骚扰怎么办 电脑安装软件时解压出现问题怎么办 公婆不尊重你的父母做媳妇的怎么办 手机扣扣接收不上文件怎么办 买了商铺付了首付商铺倒闭了怎么办 宝宝刚满月不喜欢在床上睡怎么办 别人给我打了收货款不发货怎么办 业务员私收货款公司不发货怎么办 付款后商家没发货也不退钱怎么办 苹果7P修过主板耗电严重怎么办 oppo手机进水了开不了机怎么办 手机弯了变形但不影响使用怎么办 拼多多留错电话怎么办如果已经发货 苹果6手机后壳变形了怎么办 京东退货保修卡丢了怎么办 如果京东买的显示器屏碎了怎么办 在微信上买东西退货不退钱怎么办 手机分期付款不还款被起诉了怎么办 朋友用我的花呗分期不还钱怎么办 朋友用我身份证办分期不还钱怎么办 我手机号被别人绑定信用卡了怎么办 5s用不了4g网络怎么办 红米手机返回键没了怎么办 小米手机进水了开不了机怎么办 手机返回键和菜单键失灵怎么办 苹果5s指纹按键坏了怎么办 小米手机安卓系统耗电量大怎么办? 苹果5s充不进去电怎么办 苹果手机6s返回键失灵怎么办 本人被骗同时被利用骗了别人怎么办 京东取消订单后货到了该怎么办 京东电信日租卡流量顶置了怎么办 苹果6s进水后闪光灯不亮怎么办 华为手机情景义停车事项过期怎么办 拼多多付款后商品下架了怎么办 淘宝上买化妆品买到假货了怎么办