Hihocoder 2月29日

import java.util.Scanner;

public class Main {

    static String[] month={
        "January","February","March","April","May","June","July",
            "August","September","October","November","December"
            };
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        int a = s.nextInt();
        //要加循环读入数据,每读入一次调用一次find229
        int sum[] = new int[a];
        String[] date1 = new String[3];
        String[] date2 = new String[3];
        for(int i = 0;i<a;i++){
            for(int j =0;j<3;j++){
                date1[j] = s.next();
            }
            for(int j =0;j<3;j++){
                date2[j] = s.next();
            }
            sum[i] = find229(date1,date2);
        }
        for(int i = 0;i<a;i++){
            System.out.println("Case #"+(i+1)+": "+sum[i]);
        }
        s.close();
    }
    public static int find229(String[] date1,String[] date2){
        int year1 = Integer.valueOf(date1[2]);
        int year2 = Integer.valueOf(date2[2]);
        int day2 = Integer.valueOf(date2[1].split(",")[0]);
        int result = 0;
        for(int i = ((year1-1)/4+1)*4;i<=(year2/4)*4;i = i+4){//保证每个年份能被4整除
            if(i%400 == 0){
                //从某一个能被400整除的数开始,每400个数里面有96个能被4整除但不能被100整除的数,有一个能被400整除的数,算上尾,不算头
                //比如400~800,则是从401~800有一个能被400整除的数,有96个能被4整除不能被100整除的数
                result++;
                result += (year2/400-i/400)*97;
                //小于ed.year的最大的能被400整除的数
                i = (year2/400)*400;
            }else if(i%100!=0){//不能被400整除时
                result++;
            }
        }
        //考虑起止年份
        if(year1%400==0||(year1%4==0&&year1%100!=0)){
            if(!(month[0].equals(date1[0])||month[1].equals(date1[0]))){
                result--;
            }
        }
        if(year2%400==0||(year2%4==0&&year2%100!=0)){
            if(month[0].equals(date2[0])){
                result--;
            }else if(month[1].equals(date2[0])&&day2<29){
                result--;
            }
        }
        return result;
    }
}
时间: 2024-08-25 20:45:59

Hihocoder 2月29日的相关文章

hihoCoder 1148 2月29日

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

Oyk的ACM刷题记录(始于2015年2月29日,可能含剧透)

Online Judge 题目序号/题目 简单大意/题解 犯2情况 2月29日 SPOJ GSS1  不带更新区间最大子段和. 线段树维护 区间从左/右开始的最大值.区间最大值.区间和. 1.输出忘了换行. 2.打错了一个字母. SPOJ GSS2 区间不重复最大子段和. 离线维护s[i..now],线段树维护 区间历史最大值.区间历史最大更新值.区间现在最大值.区间现在更新值. 询问输出区间历史最大值. 1.线段树询问忘记写pushdown了. SPOJ TEST 输出所有42前的数. 1.不

2月29日(编程之美2015资格赛)

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

计算两日期间2月29日总数的Java程序

事先声明,本人仅仅是个计算机领域的新手,不久前开始学习Java.后来我接到了一份关于计算两日期间2月29日总数的编程作业,仓促之中我便写下了这个程序.由于之前可以说毫无编程经验,Java也仅仅是只学了一小部分.所以目前该程序尚未解决输入问题. 我解决这个问题的思路是: 编写一个方法(leapYear)用于判断某一年份是否为闰年: 编写另一个方法(dateExist)用于判断某一时期是否真实存在,在这方法中会引用到上个方法: 最后编写main方法,引用方法(dateExist)分别判断起始日期和终

实训第1天(12月29日)

一.目标 大家自选主题(建议毕业设计题目)进行系统开发和测试,并完成相关文档. 最终提交:(1)系统源代码:(2)实训报告:需求分析+系统设计+系统实现+系统测试. 二.进度安排 1.12月29日(周一),3-8节 完成需求分析和系统设计的文档,及相关代码. 2.12月31日(周三),1-7节 完成系统模板和首页的设计,以及实现一个功能模块. 3.1月4日(周日),1-8节 完成主要功能模块,更新完善文档. 4.1月5日(周一),1-10节 完成主要功能模块,更新完善文档. 5.1月6日(周二)

软考信息系统监理师:2016年4月29日作业

软考信息系统监理师:2016年4月29日作业一.信息应用系统分析设计阶段监理1.需求分析的进入条件是什么?(记)2.需求分析的目标是什么?3.需求分析阶段的成果有哪些?(记)4.软件概要设计阶段的进入条件是什么?(记,并理解:加不加概要2字,答案均相同)5.软件详细设计阶段的进入条件是什么?6.描述算法除了流程图外,还有一些别的工具,如哪3种?7.软件设计阶段的成果是什么?(记)8.软件工程化要求以软件质量保证为核心,紧紧抓住哪8个主要环节?二.信息应用系统实施阶段监理1.编码阶段进入条件是什么

【System Log】7月14日—7月29日

本日志由系统自动生成. 从7月14日起便按照心想事成的节奏进入了实验室.打酱油.周末又去学活值班,生活的框架还是很不错的. 1.基于Hadoop的Flume,zooKeeper,这些东西算是明白了个大概. 2.第一周大概学习了javascript.jquery.css.ci框架(php)这些基本的东西,然后大概搭了个大创网站的架子出来. 3.第二周周末开始写android,答应别人要开发的一个小游戏,但是写着写着就觉得压力大写不出来. 4.中间还抽时间看了程杰的大话设计模式,和一些人ctf的wr

2月29日

我自己写的代码测试论坛上的数据都通过的,但是就是通不过OJ,应该是超时,给大家提供一种思路吧. 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 年份能被4整除但不能被100整除 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{

2016年04月29日【EPM-易通元】最新价位公布

2016年04月29日[EPM-易通元]最新价位公布   涨了.涨了.又涨了!   我们的「EPM易通元」天天见涨!太给力了!!   2016.04.29日今天已涨0,01美金,目前已到0.35美金啦!   如果你有1000个易通元,你今天就收益10美金   如果你有10000个易通元,今天就收益100美金   如果你有100000个易通元,你今天就收益1000美金.   恭喜买到「EPM易通元」的朋友们,买到即是赚到!   买入210美金到3500美金 :1美金:6.3人民币兑换,举例买入35