首页 > 试题广场 >

今年的第几天?

[编程题]今年的第几天?
  • 热度指数:35158 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入年、月、日,计算该天是本年的第几天。

输入描述:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。


输出描述:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
示例1

输入

1990 9 20
2000 5 1

输出

263
122
#include <stdio.h>

int monthaday(int month,int year){
    switch(month){
        case 0:return 0;
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;
        case 2:
            if(!(year%400)||(year%100&&!(year%4))){
                return 29;
            }else{
                return 28;
            }
        default:
            return 30;
    }
}
int main() {
    int year,month,day;
    while (scanf("%d %d %d", &year, &month ,&day) != EOF) { // 注意 while 处理多个 case
        int ans=0;
        while(month--){
            ans+=monthaday(month,year);
        }
        printf("%d\n",ans+day);
    }
    return 0;
}
发表于 2023-03-09 13:27:11 回复(0)
#include <stdio.h>
int main() {
    int year, month, day;
    int sum = 0;
    scanf("%d %d %d", &year, &month, &day);
    int month1[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //不是闰年
    int i = 1;
    if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0) {//闰年
        for (i = 1; i < month; i++) {
            sum = month1[i] + sum;
        }
        if (month <= 2) {//2月以前计算总天数
            sum = sum + day;
        } else { //2月以后计算总天数
            sum = sum + 1 + day;
        }
    } else {
        for (i = 1; i < month; i++) {
            sum = sum + month1[i];
        }
        sum = sum + day;
    }
    printf("%d", sum);
}
发表于 2023-01-12 15:55:55 回复(0)
#include<stdio.h>
int main(){
    int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,days;
    while(scanf("%d%d%d",&year,&month,&days)!=EOF)
    {
        int num=0;
        if((year%4==0&&year%100!=0)||(year%400==0))
            num=num+1;
        for(int i=0;i<month-1;i++)
        {
            num+=months[i];
        }
        printf("%d\n",days+num);
    }
    return 0;
}
为什么1236 2 15这组数据通不过 预期46 实际输出47?
发表于 2022-03-02 21:41:20 回复(1)
#include<stdio.h>

int IsLeapYear(int year){
    return (year%400 == 0 || (year%100 != 0 && year % 4 == 0));
}

int main(){
    int year, month, day;
    int months[2][13] = {{0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
                         {0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}};
    
    while(scanf("%d%d%d", &year, &month, &day) != EOF) printf("%d\n", months[IsLeapYear(year)][month] + day);
}

发表于 2022-03-01 13:56:38 回复(0)
#include <stdio.h>
int main() {
    int y, m, d, i, r;
    int dom[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    while (scanf("%d%d%d", &y, &m, &d) != EOF) {
        r = 0;
        dom[2] = 28;
        if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) 
            dom[2] = 29;
        for(i = 1; i < m; ++i)
            r += dom[i];
        r += d;
        printf("%d\n", r);
    }
    return 0;
}

发表于 2022-02-26 23:08:54 回复(0)
我就只能想到一层接一层的if else 没救了
发表于 2022-02-13 10:47:39 回复(0)