鱼C论坛

 找回密码
 立即注册
查看: 1841|回复: 2

[已解决]我这里怎么错了?大佬求解!

[复制链接]
发表于 2022-11-30 21:31:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入 x,yx,y,输出 [x,y][x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。

输入格式
输入两个正整数 x,yx,y,以空格隔开。

输出格式
第一行输出一个正整数,表示 [x,y][x,y] 区间中闰年个数。

第二行输出若干个正整数,按照年份单调递增的顺序输出所有闰年年份数字。

输入输出样例
输入 #1复制
1989 2001
输出 #1复制
3
1992 1996 2000
说明/提示
数据保证,1582\le x < y \le 30001582≤x<y≤3000。

#include <stdio.h>

int main(int argc,const char*argv)
{
        int x,y;
        scanf("%d %d",&x,&y);
        int i=x,year,count=0;
    while(i<=y){
                if(year%400==0||(year%4==0&&year%100==0)){
                count++;
                i++;
                }
        }
        printf("%d\n",count);
        printf("%d\n",i);
        return 0;
}
最佳答案
2022-11-30 21:59:18
本帖最后由 jackz007 于 2022-11-30 22:06 编辑

        闰年条件写错了
                if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {  // 应该是 y % 100 != 0 
        你的 while 循环只能得到 [x , y] 区间内的闰年数量,却不能记录每一个闰年的年份数值,为了在统计计数的同时,也记下闰年的年份,避免第二次循环,需要开辟一个一维数组。
        这是我写的代码:
#include <stdio.h>

int main(int argc , const char ** argv)    // argv 是指针数组,而不是一个指针
{
        int d[400] , i , x , y , year , count              ;
        scanf("%d%d", & x , & y)                           ;
        for(count = 0 , year = x ; year <= y ; year ++) {
                if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
                        d[count ++] = year                 ;
                }
        }
        printf("%d\n" , count)                             ;
        printf("%d" , d[0])                                ;
        for(i = 1 ; i < count ; i ++) printf(" %d" , d[i]) ;
        printf("\n")                                       ;
}
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1989 2001
3
1992 1996 2000

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-30 21:59:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-30 22:06 编辑

        闰年条件写错了
                if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {  // 应该是 y % 100 != 0 
        你的 while 循环只能得到 [x , y] 区间内的闰年数量,却不能记录每一个闰年的年份数值,为了在统计计数的同时,也记下闰年的年份,避免第二次循环,需要开辟一个一维数组。
        这是我写的代码:
#include <stdio.h>

int main(int argc , const char ** argv)    // argv 是指针数组,而不是一个指针
{
        int d[400] , i , x , y , year , count              ;
        scanf("%d%d", & x , & y)                           ;
        for(count = 0 , year = x ; year <= y ; year ++) {
                if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
                        d[count ++] = year                 ;
                }
        }
        printf("%d\n" , count)                             ;
        printf("%d" , d[0])                                ;
        for(i = 1 ; i < count ; i ++) printf(" %d" , d[i]) ;
        printf("\n")                                       ;
}
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
1989 2001
3
1992 1996 2000

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-30 22:28:51 | 显示全部楼层
#include <stdio.h>

int main(int argc,const char*argv)
{
        int x,y;
        scanf("%d %d",&x,&y);
        int i=x,count=0;
    while(i<=y){
                if(i%400==0||(i%4==0&&i%100!=0)){
                count++;
            printf("%d\n",i);
                }
                i++;
        }
        printf("%d\n",count);
        return 0;
}
我想通了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 11:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表