HDU 2005

来源:互联网 发布:re文件管理器源码 编辑:程序博客网 时间:2024/05/22 06:22


New~ 本学期最后一次入选"ACM校队"的机会——12月份月赛(赶快报名吧~)

第几天?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 64151    Accepted Submission(s): 24258


Problem Description
给定一个日期,输出这个日期是该年的第几天。
 

Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
 

Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
 

Sample Input
1985/1/202006/3/12
 

Sample Output
2071
 

为什么说这题 ,因为比赛时遇到一道类似的题当时脑袋比较坍塌, 竟然纠结了很久 

题意; 算几月几号是那年的第几天

算法思想:

     1、判断平年还是闰年 这里用宏定义

      2、需要一个二维数组表示 那年的各月分的天数 这个很重要特别是28 29,很坑爹

      3、用个循环线把之前的月份的天数加起来 最后再加个零头就可以了

源代码:

#include<iostream>#include<cstdio>using namespace std;#define lev(n) (n%4 ==0 && (n%100 != 0 || n%400 ==0))int main(){//上面定义了一宏 首先能被4整除, 不能被100 可以被400整除的数是 闰年返回1其他返回0    int i;    int y, m, d;    while(scanf("%d/%d/%d",&y,&m,&d) != EOF)    {//思路很简单先把这个年头的所有月份的天数先算出来 再加上这个月的        //技巧在于为什么先是0 因为如果不先为0 的话 是1月的话, 那么1 月的天数也会被加上的        int day = 0;        int month[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};        for(i =0; i < m; i++)        {            day += month[lev(y)][i];        }        day += d;        cout<<day<<endl;    }    return  0;}


0 0
原创粉丝点击