C语言OJ项目参考(1915) 第几天

简介: (1915) 第几天 Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input 2000-01-01 Samp

(1915) 第几天
Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
2000-01-01
Sample Output
1

[参考解答]
(1)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        int i;
        for(i=1; i<m; i++)
        {
            switch(i)
            {
            case 2:
                days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days+=30;
                break;
            default:
                days+=31;
                break;
            }
        }
        printf("%d\n",days);
    }
    return 0;
}

(2)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    int i;
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        for(i=1; i<m; i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                days+=31;
            else if (i==4||i==6||i==9||i==11)
                days+=30;
            else
                days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
        }
        printf("%d\n",days);
    }
    return 0;
}

(3)后面要学习数组。然后就可以这样来了(对数组充满期待吧)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    int i;
    int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        for(i=1; i<m; i++)
        {
            days+=a[i];
        }
        if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天
            days++;
        printf("%d\n",days);
    }
    return 0;
}

(4)有同学写成下面的代码,结果对,但这样的程序的确不好

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        if(((y%4==0)&&(y%100!=0))||(y%400==0))
        {
            switch(m)
            {
            case 1:
                days=d;
                break;
            case 2:
                days=d+31;
                break;
            case 3:
                days=d+31+29;
                break;
            case 4:
                days=d+31+29+31;
                break;
            case 5:
                days=d+31+29+31+30;
                break;
            case 6:
                days=d+31+29+31+30+31;
                break;
            case 7:
                days=d+31+29+31+30+31+30;
                break;
            case 8:
                days=d+31+29+31+30+31+30+31;
                break;
            case 9:
                days=d+31+29+31+30+31+30+31+31;
                break;
            case 10:
                days=d+31+29+31+30+31+30+31+31+30;
                break;
            case 11:
                days=d+31+29+31+30+31+30+31+31+30+31;
                break;
            case 12:
                days=d+31+29+31+30+31+30+31+31+30+31+30;
                break;
            }
        }
        else
        {
            switch(m)
            {
            case 1:
                days=d;
                break;
            case 2:
                days=d+31;
                break;
            case 3:
                days=d+31+28;
                break;
            case 4:
                days=d+31+28+31;
                break;
            case 5:
                days=d+31+28+31+30;
                break;
            case 6:
                days=d+31+28+31+30+31;
                break;
            case 7:
                days=d+31+28+31+30+31+30;
                break;
            case 8:
                days=d+31+28+31+30+31+30+31;
                break;
            case 9:
                days=d+31+28+31+30+31+30+31+31;
                break;
            case 10:
                days=d+31+28+31+30+31+30+31+31+30;
                break;
            case 11:
                days=d+31+28+31+30+31+30+31+31+30+31;
                break;
            case 12:
                days=d+31+28+31+30+31+30+31+31+30+31+30;
                break;
            }
        }
        printf("%d\n",days);
    }
    return 0;
}
目录
相关文章
|
10月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
99 1
C语言实战项目——学生试卷分数统计
C语言实战项目——学生试卷分数统计
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
103 7
|
算法 C语言
C语言——oj刷题——回文字符串
C语言——oj刷题——回文字符串
133 2
|
算法 C语言
C语言——oj刷题——字符串左旋和轮转数组
C语言——oj刷题——字符串左旋和轮转数组
87 1
|
C语言
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
C语言——oj刷题——调整数组使奇数全部都位于偶数前面
121 1
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
111 1
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
91 1
|
C语言
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
134 0
|
C语言
C语言——oj刷题——猜数字游戏
C语言——oj刷题——猜数字游戏
93 0