zoukankan      html  css  js  c++  java
  • 2015编程之美资格赛题目1 : 2月29日 分类: 算法 2015-04-21 11:28 27人阅读 评论(0) 收藏

    描述

    给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。

    只有闰年有2月29日,满足以下一个条件的年份为闰年:

    1. 年份能被4整除但不能被100整除

    2. 年份能被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

    小数据:

    2000 ≤ year ≤ 3000

    大数据:

    2000 ≤ year ≤ 2×109

    样例输入
    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 <stdio.h>
    #include <string.h>
    
    int main()
    {
    	char month1[12], month2[12];
    	int day1, year1, day2, year2;
    	int r, count;
    	while (scanf("%d", &r)!=EOF) {
    	    int i;
    	    for(i = 1; i <= r; i++) {
    			scanf("%s %d, %d", month1, &day1, &year1);
    			scanf("%s %d, %d", month2, &day2, &year2);
    			count = 0;
    			if (strcmp(month1,"January")==0 || (strcmp(month1,"February")==0&&day1<=29)){
    			    --year1;
    			}
    			if (strcmp(month2,"January")==0 || (strcmp(month2,"February")==0&&day2<29)){
    			    --year2;
    			}
    			count = (year2>>2)-(year1>>2);
    			count = count -(year2/100-year1/100);
    			count += (year2/400-year1/400);
    			printf ("Case #%d: %d
    ", i, count);
    		}
    	}
    	return 0;
    }
    






    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656934.html
Copyright © 2011-2022 走看看