HDOJ2005:第几天【switch语句的简单应用】

第几天?

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

Problem Description

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

Input

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

Output

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

Sample Input

1985/1/20 2006/3/12

Sample Output

20 71

Author

lcy

Source

C语言程序设计练习(一)

解:

#include
int main()
{
    int y,m,d,sum;
    while(~scanf("%d/%d/%d",&y,&m,&d))
    {
        sum=0;
        switch(m)
        {
        case 12:sum+=30;
        case 11:sum+=31;
        case 10:sum+=30;
        case 9:sum+=31;
        case 8:sum+=31;
        case 7:sum+=30;
        case 6:sum+=31;
        case 5:sum+=30;
        case 4:sum+=31;
        case 3:if((y%4==0)&&((y%100)!=0)||(y%400==0))
                   sum+=29;
                   else
                   sum+=28;
        case 2:sum+=31;
        case 1:sum+=d;
        }
        printf("%dn",sum);
        sum=0;
    }
    return 0;
}

首先是关于润年的判断,简单打草后可以推出是在三月的时候进行。一开始还打算用if语句嵌套,写了三层之后发现还是比较麻烦的,改用switch语句。要注意switch语句是是从表达式值于case的常量表达式值i相等时,从该case进入的,然后依次执行后面的语句。也就是说,关于这道题目的case应该倒着写,从case12case1,这样才能保证依次执行。

题目不难,主要考察的switch语句的运用,水水的一次过~

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注