7-4 输出闰年

部署运行你感兴趣的模型镜像

输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:
输入在一行中给出21世纪的某个截止年份。

输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

输入样例1:

2048

输出样例1:

2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048

输入样例2:

2000

输出样例2:

Invalid year!
#include<stdio.h>
int main()
{
    int i,n;
    scanf("%d\n",&i);
    if(i<2001||i>2100)
    {
        printf("Invalid year!");
    }
    else if(i<2004&&i>2000)//此处必须分成两组情况写出来,因为程序代码自上而下进行,且for
    //的前提条件是没有的,则若将else if中的else去掉,后面的else也去掉
    //则无论什么数都能执行for循环了,只不过是满足前面两个if的条件的数再多执行一次其相对应
    //的语句而已。(第二个if中的除外)
    //如此时再输入2101
    //则会在第一行先输出"Invalid year!"然后接着运行for循环截止到2101年前的所有闰年。
    {
        printf("None");
    }
    else if(i>=2004&&i<=2100)
    {
    for(n=2004;n<=i;n++)
        {
            if(n%4==0&&n%100!=0)
            {
                printf("%d\n",n);
            }
    }
      }
    return 0;
}

其次,这一点则是自己的考虑不周全了
题目虽然说输入格式是给出21世纪的某个截止年份,即我们应该输入这个
但在输出格式中明明已经给出提示了:
若非21世纪的则输出"Invalid year!"且其情况很多,不只是能输入2000
还有(<2000,>2100的情况)

再就是经常要来细细品味这道题
这道题很精彩!

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

我们来正确、完整地实现题目 **7-4 输出闰年**。 --- ### ✅ 题目要求 - 输出21 世纪(即 2001 年起)到某个截止年份之间的所有 **闰年** - 闰年判断规则: - 能被 4 整除但不能被 100 整除,**或** - 能被 400 整除 - 输入的年份必须是 **21 世纪** 的年份:即 $ 2001 \leq \text{year} \leq 2100 $ - 若输入不是 21 世纪年份输出 `"Invalid year!"` - 如果范围内没有闰年输出 `"None"`(虽然实际上会有) --- ### ✅ 正确 C 语言代码实现 ```c #include <stdio.h> // 判断是否为闰年 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } int main() { int end_year; scanf("%d", &end_year); // 检查是否为21世纪年份 if (end_year < 2001 || end_year > 2100) { printf("Invalid year!\n"); return 0; } // 从2004开始找(第一个21世纪闰年),一直到end_year int found = 0; // 标记是否找到至少一个闰年 for (int year = 2004; year <= end_year; year += 4) { // 加速循环:每4年一次,但需验证是否真是闰年(如2100不是) if (isLeapYear(year)) { printf("%d\n", year); found = 1; } } // 如果没找到任何闰年 if (!found) { printf("None\n"); } return 0; } ``` --- ### 🔍 代码详解 | 部分 | 说明 | |------|------| | `isLeapYear()` 函数 | 封装闰年判断逻辑,清晰易读 | | `scanf("%d", &end_year)` | 读入用户输入的截止年份 | | `if (end_year < 2001 || end_year > 2100)` | 判断是否属于 21 世纪(2001–2100) | | `for (int year = 2004; year <= end_year; year += 4)` | 优化:闰年通常是每4年一次,从2004开始跳 | | 内部仍调用 `isLeapYear` | 防止像 2100 这样“看似能被4整除”但实际上不是闰年的情况 | | `found` 标志位 | 记录是否有输出;若无,则输出 `None` | > 💡 注意2100 年 **不是闰年**(能被100整除但不能被400整除),所以即使它出现在循环中也不会被输出--- ### ✅ 样例验证 #### 输入样例 1: ``` 2048 ``` 程序输出: ``` 2004 2008 2012 ... 2048 ``` ✅ 完全匹配! #### 输入样例 2: ``` 2000 ``` 由于 2000 < 2001 → 不在 21 世纪范围内 ✅ 输出:`Invalid year!` > ⚠️ 特别注意:2000 年虽然是闰年(因能被400整除),但它属于 **20 世纪**,不在本题考虑范围。 --- ### ❓为什么从 2004 开始? - 21 世纪第一年是 2001 - 最近的前一个闰年是 2000(不是21世纪- 下一个闰年是 **2004**,是 21 世纪第一个闰年 所以我们从 2004 开始遍历,每次加 4,提高效率。 --- ### ✅ 更严谨版本(不跳步,逐一年判断) 如果你担心跳步漏掉某些情况(比如边界处理错误),也可以写成普通循环: ```c for (int year = 2001; year <= end_year; year++) { if (isLeapYear(year)) { printf("%d\n", year); found = 1; } } ``` 结果一样,只是稍微慢一点,但对于这么小的数据量无所谓。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值