鱼C论坛

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

[已解决]错在哪了啊

[复制链接]
发表于 2023-12-2 19:16:16 | 显示全部楼层 |阅读模式

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

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

x
输入年月日,判断这一天是今年的第几天?
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int year,mon,day,days=0,i;
    scanf("%4d%2d%2d",&year,&mon,&day);
    if(mon<1||mon>12)
    {cout<<"-1"<<endl;return 0;}
    if(day>31) {cout<<"-1"<<endl;return 0;}
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%400==0||(year%4==0&&year%100!=0))
    {
        if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 9:if(day==31){cout<<"-1"<<endl;return 0;}
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=a[i-1];
        }
    }
    if(year%400!=0||(year%4!=0&&year%100==0))
    {
        if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 9:if(day==31){cout<<"-1"<<endl;return 0;}
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=a[i-1];
        }
    }
    cout<<days;
    return 0;
}
最佳答案
2023-12-2 19:46:12
在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组a,应当使用非闰年的月份天数数组b。以下是修正后的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int year,mon,day,days=0,i;
    scanf("%4d%2d%2d",&year,&mon,&day);
    if(mon<1||mon>12)
    {cout<<"-1"<<endl;return 0;}
    if(day>31) {cout<<"-1"<<endl;return 0;}
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%400==0||(year%4==0&&year%100!=0))
    {
        if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:   // 此处应为8
            case 10:  // 此处应为10
            case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=a[i-1];
        }
    }
    if(year%400!=0||(year%4!=0&&year%100==0))
    {
        if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:   // 此处应为8
            case 10:  // 此处应为10
            case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=b[i-1]; // 此处应为b
        }
    }
    cout<<days;
    return 0;
}


这段代码修复了你的问题,现在正确地在给定日期是非闰年时使用了正确的月份天数数组,并且在日期超出月份天数限制时也可以正确返回错误信息。

有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-2 19:16:31 | 显示全部楼层
错误的地方在于条件判断语句 `if(mon12)`,这是一个错误的条件表达式。

可以修改代码如下:
#include <iostream>using namespace std;int main() {    int year, mon, day, days = 0;    cin >> year >> mon >> day;    int month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};    // 判断是否为闰年,闰年2月有29天    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {        month_days[1] = 29;    }    // 累加前面几个月的天数    for (int i = 0; i < mon - 1; i++) {        days += month_days[i];    }    // 加上当前月的天数    days += day;    cout << "这一天是今年的第" << days << "天" << endl;    return 0;}
这段代码首先根据输入的年份 `year` 判断是否为闰年,如果是闰年则将二月的天数设为29天。然后使用循环累加前面几个月的天数,最后加上当前月的天数,得到结果输出。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-2 19:46:12 | 显示全部楼层    本楼为最佳答案   
在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组a,应当使用非闰年的月份天数数组b。以下是修正后的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int year,mon,day,days=0,i;
    scanf("%4d%2d%2d",&year,&mon,&day);
    if(mon<1||mon>12)
    {cout<<"-1"<<endl;return 0;}
    if(day>31) {cout<<"-1"<<endl;return 0;}
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%400==0||(year%4==0&&year%100!=0))
    {
        if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:   // 此处应为8
            case 10:  // 此处应为10
            case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=a[i-1];
        }
    }
    if(year%400!=0||(year%4!=0&&year%100==0))
    {
        if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
        else switch(mon)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:   // 此处应为8
            case 10:  // 此处应为10
            case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
        }
        days=day;
        for(i=1;i<mon;i++)
        {
            days+=b[i-1]; // 此处应为b
        }
    }
    cout<<days;
    return 0;
}


这段代码修复了你的问题,现在正确地在给定日期是非闰年时使用了正确的月份天数数组,并且在日期超出月份天数限制时也可以正确返回错误信息。

有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 08:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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