题解 | #计算一年中的第几天#

计算一年中的第几天

https://www.nowcoder.com/practice/178aa3dafb144bb8b0445edb5e9b812a

一、核心思路

1.确定二月天数

根据闰年规则(能被4整除且不能被100整除,或者能被400整除)决定二月是28天(平年)还是29天(闰年)。

2.累加整月天数

用数组存储每个月的天数(1月到12月),将前 month-1 个月的天数累加起来。

3.加上当月天数

最后加上输入的 day,即为当年的第几天。

二、关键注意事项

  • 闰年判断公式: (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

  • 数组索引:月份数组下标0对应1月,所以前 month-1 个月对应 mon[0] 到 mon[month-2]。

  • 多组输入:如果题目要求处理多组数据(如 while(scanf(...)!=EOF)),必须每次循环重置累加变量,否则天数会错误累加。

  • 二月天数动态修改:每次判断闰年后,将 mon[1] 重新赋值为28或29,避免上次修改影响下一次计算。

三、代码结构(C语言)

c #include <stdio.h>

int main() { int year, month, day; int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

while (scanf("%d %d %d", &year, &month, &day) != EOF) {
    int count = 0;                     // ① 每次重置累加器
    
    // ② 闰年判断,调整二月天数
    if ((year%4==0 && year%100!=0) || (year%400==0))
        mon[1] = 29;
    else
        mon[1] = 28;
    
    // ③ 累加前 month-1 个月的天数
    for (int i = 0; i < month - 1; i++)
        count += mon[i];
    
    // ④ 加上当月天数
    count += day;
    
    printf("%d\n", count);
}
return 0;

}

四、测试用例

输入(年 月 日) 预期输出 说明

1990 9 20 ,263 平年,计算无误

2000 3 1 ,61 闰年(2月29天)

2023 1 1 ,1 第一天

2023 12 31 ,365 最后一天

五、常见错误与避坑

  • 忘记重置 count → 多组输入时结果累加。

  • 月份数组未恢复 → 若不在循环内重置 mon[1],前一个闰年的29天会影响到后续平年计算。

  • 数组越界 → month-1 最小为0(1月时循环0次),最大为11(12月时循环11次),合法。

  • 逻辑运算符优先级 → 建议显式加括号:(year%4==0 && year%100!=0) || (year%400==0)。

#解题#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务