HDOJ_2005_第几天
来源:互联网 发布:电脑家教一对一软件 编辑:程序博客网 时间:2024/05/12 08:01
题目:
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
该题目难点在于:
1.输入格式问题,可以采用scanf进行一定格式的输入。
scanf("%d/%d/%d",&y,&m,&d)
2.while循环导致的时间超限问题,(这是我掉的坑),在while中如果只是while(scanf(“%d/%d/%d”,&y,&m,&d)),放在oj上提交会出现Time Limit Exceeded错误,经过借鉴他人经验,发现如果这样scanf(“%d/%d/%d”,&y,&m,&d)!=EOF 则不会有错误出现。(原因我不太清楚,请各位大佬指教)
做题思路历程:
1.一开始我采用的方法是,创建一个月份数组将每个月所对应的日子提前写好,然后只需要用循环遍历求和即可, 但是出现了Time Limit Exceeded错误。
2.后来为了减少时间复杂度,用switch case写了12个语句,巨蠢,果不其然,还是 Time Limit Exceeded错误。
3.最终发现其实这两种方法都可以,问题出在EOF上,若没有!=EOF,则会报错。
EOF是一个计算机术语,为End Of File的缩写。
对于EOF的详细解释可以参考该博主的文章http://blog.csdn.net/yeruby/article/details/7489213。
代码如下:
#include<iostream>using namespace std;int main(){ int y,m,d;//分别表示年月日 bool bl;//当为true时表示为闰年,2月有29天 int month[13] = {0,0,31,59,90,121,151,181,212,243,273,304,334}; int daynum; while(scanf("%d/%d/%d",&y,&m,&d)!=EOF){ daynum = 0; if((y%4==0&&y%100!=0)||(y%400==0)) bl = true; else bl = false; if(m>2&&bl) daynum = month[m] + d + 1; else if(m<=2||!bl) daynum = month[m] + d ; cout<<daynum<<endl; } return 0;}
阅读全文
0 0
- HDOJ_2005_第几天
- 第几天
- 【第几天?】
- 第几天?
- 第几天
- 第几天?
- 第几天
- 第几天
- 第几天?
- 第几天
- 第几天
- 第几天?
- 第几天
- 第几天?
- 第几天
- 第几天
- 第几天?
- 第几天?
- 账号系统固定盐值的问题:md5(md5(passWord) + userID)
- 吴恩达-深度学习-神经网络和深度学习-第二周
- ButterKnife的使用
- Java基础技术核心归纳(一)
- 基础代码-最小值维护
- HDOJ_2005_第几天
- 流水线
- 【dp】教主的花园
- AOP 基本术语及其在 Spring 中的实现
- 将sqlite3移植到嵌入式Linux开发板M6708上
- 关于利用Python无法直接抓取全部网易云音乐评论时怎么解决
- EBS查看FORM上执行的SQL语句
- MySQL数据库性能(SQL)优化方案
- 廖雪峰python函数的参数学习笔记