微软编程之美2015 第一题
来源:互联网 发布:淘宝客怎么推广宝贝 编辑:程序博客网 时间:2024/04/30 13:41
题目1 : 2月29日
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
给定两个日期,计算这两个日期之间有多少个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
微软编程之美的资格赛,看了看题目,第一题还是可做的,第二题暴力也许能过,暂且不提。
这题拿到手后感觉是很水的,就是一个判断闰年的事,当然,大数据到2*10^9,暴力肯定不行,可小数据只有2000~3000啊。很快的码完代码,提交,WA,好,很干脆。然后仔细查看代码和想极限数据,果然是忘了同一年的两种特殊情况,改完后提交,WA。好吧,继续看。出了很多数据,一直没发现错误。然后发现这个比赛还是有讨论区的,进去看看,发现很多人第一题都在WA,有的人从上午WA到下午,好吧,鬼哭狼嚎。淡定,继续找。这是想到了读入方面,仔细检查,才发现有问题。但是题目描述中对日期为个位数时没有注明是只输入 1, 还是 01, (举例) ,测试样例中也没有。真是纠结啊,好吧,试试,改了一下,提交,AC。
总结来说,还是输在了对细节的处理还有读入时的问题。做了很多,还是不长记性,字符串的读入是最容易挖坑的。虽然这题不是英文的,但我感觉还是很有意义。谨记,谨记,字符串的处理一定要很小心才对。
#include <stdio.h>#include <string.h>int pan(int year){if (year%400==0 || year%4==0 && year%100!=0) return 1; else return 0;}int pan2(char month[]){int n; if (strcmp(month,"January")==0) n=1;if (strcmp(month,"February")==0) n=2; if (strcmp(month,"March")==0) n=3; if (strcmp(month,"April")==0) n=4;if (strcmp(month,"May")==0) n=5; if (strcmp(month,"June")==0) n=6; if (strcmp(month,"July")==0) n=7; if (strcmp(month,"August")==0) n=8;if (strcmp(month,"September")==0) n=9; if (strcmp(month,"October")==0) n=10;if (strcmp(month,"November")==0) n=11;if (strcmp(month,"December")==0) n=12;return n; }int main(){int day1,day2,k,i,year1,year2,sum,one,two,t,p1,p2;char month1[10],month2[10],day11[10],day22[10];scanf("%d",&t);for (k=0;k<t;k++){memset(month1,0,sizeof(month1));memset(month2,0,sizeof(month2));memset(day11,0,sizeof(day11));memset(day22,0,sizeof(day22));scanf("%s",month1); scanf("%s",day11); scanf("%d",&year1);if (day11[1]==',') day1=day11[0]-48;else day1=(day11[0]-48)*10+day11[1]-48;//printf("%d\n",day1);scanf("%s",month2); scanf("%s",day22); scanf("%d",&year2);if (day22[1]==',') day2=day22[0]-48;else day2=(day22[0]-48)*10+day22[1]-48;//printf("%d\n",day2);sum=0;for (i=year1+1;i<=year2-1;i++) if (pan(i)==1) sum++;//printf("%d\n",sum); //printf("%d",pan(2400));one=pan2(month1);two=pan2(month2);p1=p2=0;if (one<2 && pan(year1)==1 || one==2 && pan(year1)==1 && day1<=29) { sum++; p1=1; }if (two>2 && pan(year2)==1 || two==2 && day2==29 && pan(year2)==1) { sum++; p2=1; } //printf("%d %d\n",p1,p2);if (year1==year2 && two==1 || year1==year2 && two==2 && day2<29) sum=0;if (year1==year2 && one>2) sum=0;if (year1==year2 && p1==1 && p2==1) sum--; printf("Case #%d: %d\n",k+1,sum); }return 0;}
- 微软编程之美2015 第一题
- 微软2013 编程之美 第一题 传话游戏
- 2015编程之美资格赛第一题
- 2015编程之美资格赛第一题
- 编程之美2015第一题
- 2014 微软 编程之美 初赛 第一场 题解
- 2014微软编程之美初赛第一场 焦距
- (2)2014微软编程之美初赛第一场赛题
- 微软编程之美2014初赛第一场#3
- 编程之美 第一场 第一题
- 小白WA在微软编程之美第一题传话游戏
- 2014微软编程之美初赛第一场第二题 树
- 2014微软编程之美初赛第一场第三题 活动中心
- 2015编程之美 该死的第一题
- 编程之美大赛资格赛第一题
- 《编程之美——微软技术面试心得》第一刷勘误
- 微软2014编程之美初赛第一场——题目1 : 焦距
- 微软2014编程之美初赛第一场——题目2 : 树
- ffmpeg添加mpeg ps流的pcm的编码支持
- Npc制作,实用Enemy AI制作一个游戏中可用的Npc
- 使用JDBC处理大数据 读写文件
- .settings各文件的作用
- ffmpeg添加MP4的pcm音频支持
- 微软编程之美2015 第一题
- (2.3.7)学习Javascript闭包(Closure)
- POI 获取Excel列数和行数的方法
- HTTP协议详解
- 2015编程之美资格赛:回文子序列数 DP
- Boost Asio库的学习与探究(三)
- 系统调用方式文件编程
- noj算法题——循环赛日程表
- STL多重集合multiset