输出闰年,看一下我代码的问题

输出闰年 输出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;
    int count = 0;
    scanf("%d",&N);
    if(N/100==20){
        for(i=2000;i<=N;i++){
            if(i/4==0 && i/100!=0||i/400==0){
                printf("%d\n",i);
                count++;
            }
            }
        if(count==0){
            printf("None");
            return 0;
        }
        }
        else{
        printf("Invalid year!");
            return 0;

看看这段代码有什么问题,PTA一直报错

第一句少了个#号,倒数第二句少了}

修改如下,改动处见注释,供参考:

#include<stdio.h>
int main(){
    int i,N;
    int count = 0;
    scanf("%d",&N);
    if(N > 2000){  //if(N/100==20) // 修改
        for(i=2001;i<=N;i++){  // for(i=2000;i<=N;i++)  修改
            if(i%4==0 && i%100!=0 || i%400==0){  //if(i/4==0 && i/100!=0||i/400==0) 修改
                printf("%d\n",i);
                count++;
            }
        }
        if(count==0){
            printf("None");
           // return 0;     修改
        }
    }
    else{
        printf("Invalid year!");
    }
    return 0;
}

代码,修改见注释:

#include<stdio.h>
int main(){
    int i,N;
    int count = 0;
    scanf("%d",&N);
    if(N>2000) //这里 
    { 
        for(i=2004;i<=N;i++){ //这里 因为题目说2000年是不算的,所以从2001年开始 
                              //还可以加个小优化,因为第一个闰年是2004,可以从这开始
            if(i%4==0&&i%100!=0||i%400==0)
            {
                printf("%d\n",i); 
                count++;
            }
        }
               if(count==0)
            {
                printf("None");
                return 0;
            }
    }
    else{
           printf("Invalid year!");
        return 0;
    }
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/702478
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案

    问题代码存在一些逻辑错误和语法错误。下面是对代码进行改正和优化的解决方案。

    #include <stdio.h>
    
    int main() {
        int i, N;
        int count = 0;
    
        scanf("%d", &N);                          // 以 %d 格式读取输入年份
    
        if (N >= 2000 && N < 2100) {               // 检查输入年份是否是21世纪的年份
            for (i = 2000; i <= N; i++) {
                if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
                    printf("%d\n", i);              // 输出满足闰年条件的年份
                    count++;
                }
            }
    
            if (count == 0) {
                printf("None");                     // 若不存在闰年,则输出 "None"
            }
        } 
        else {
            printf("Invalid year!");                // 若输入年份不符合要求,则输出 "Invalid year!"
        }
    
        return 0;
    }
    

    请使用以上改正后的代码进行测试,并输入合适的截止年份进行验证。

    例子:

    输入:

    2025
    

    输出:

    2000
    2004
    2008
    2012
    2016
    2020
    

    这段代码使用了 %d 格式化字符串来读取输入年份,通过循环遍历从2000年到输入年份之间的所有年份,判断是否满足闰年的条件,并输出满足条件的闰年年份。如果不存在任何闰年,则输出"None"。如果输入的年份不符合21世纪的范围,则输出"Invalid year!"。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^