鱼C论坛

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

[已解决]错在哪了啊

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

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

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

x
输入年月日,判断这一天是今年的第几天?
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int year,mon,day,days=0,i;
  6.     scanf("%4d%2d%2d",&year,&mon,&day);
  7.     if(mon<1||mon>12)
  8.     {cout<<"-1"<<endl;return 0;}
  9.     if(day>31) {cout<<"-1"<<endl;return 0;}
  10.     int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  11.     int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  12.     if(year%400==0||(year%4==0&&year%100!=0))
  13.     {
  14.         if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
  15.         else switch(mon)
  16.         {
  17.             case 1:
  18.             case 3:
  19.             case 5:
  20.             case 7:
  21.             case 9:if(day==31){cout<<"-1"<<endl;return 0;}
  22.         }
  23.         days=day;
  24.         for(i=1;i<mon;i++)
  25.         {
  26.             days+=a[i-1];
  27.         }
  28.     }
  29.     if(year%400!=0||(year%4!=0&&year%100==0))
  30.     {
  31.         if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
  32.         else switch(mon)
  33.         {
  34.             case 1:
  35.             case 3:
  36.             case 5:
  37.             case 7:
  38.             case 9:if(day==31){cout<<"-1"<<endl;return 0;}
  39.         }
  40.         days=day;
  41.         for(i=1;i<mon;i++)
  42.         {
  43.             days+=a[i-1];
  44.         }
  45.     }
  46.     cout<<days;
  47.     return 0;
  48. }
复制代码
最佳答案
2023-12-2 19:46:12
在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组a,应当使用非闰年的月份天数数组b。以下是修正后的代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int year,mon,day,days=0,i;
  6.     scanf("%4d%2d%2d",&year,&mon,&day);
  7.     if(mon<1||mon>12)
  8.     {cout<<"-1"<<endl;return 0;}
  9.     if(day>31) {cout<<"-1"<<endl;return 0;}
  10.     int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  11.     int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  12.     if(year%400==0||(year%4==0&&year%100!=0))
  13.     {
  14.         if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
  15.         else switch(mon)
  16.         {
  17.             case 1:
  18.             case 3:
  19.             case 5:
  20.             case 7:
  21.             case 8:   // 此处应为8
  22.             case 10:  // 此处应为10
  23.             case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
  24.         }
  25.         days=day;
  26.         for(i=1;i<mon;i++)
  27.         {
  28.             days+=a[i-1];
  29.         }
  30.     }
  31.     if(year%400!=0||(year%4!=0&&year%100==0))
  32.     {
  33.         if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
  34.         else switch(mon)
  35.         {
  36.             case 1:
  37.             case 3:
  38.             case 5:
  39.             case 7:
  40.             case 8:   // 此处应为8
  41.             case 10:  // 此处应为10
  42.             case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
  43.         }
  44.         days=day;
  45.         for(i=1;i<mon;i++)
  46.         {
  47.             days+=b[i-1]; // 此处应为b
  48.         }
  49.     }
  50.     cout<<days;
  51.     return 0;
  52. }
复制代码



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

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

使用道具 举报

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

可以修改代码如下:
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.     int year, mon, day, days = 0;
  5.     cin >> year >> mon >> day;
  6.     int month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  7.     // 判断是否为闰年,闰年2月有29天
  8.     if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
  9.         month_days[1] = 29;
  10.     }
  11.     // 累加前面几个月的天数
  12.     for (int i = 0; i < mon - 1; i++) {
  13.         days += month_days[i];
  14.     }
  15.     // 加上当前月的天数
  16.     days += day;
  17.     cout << "这一天是今年的第" << days << "天" << endl;
  18.     return 0;
  19. }
复制代码

这段代码首先根据输入的年份 `year` 判断是否为闰年,如果是闰年则将二月的天数设为29天。然后使用循环累加前面几个月的天数,最后加上当前月的天数,得到结果输出。

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

使用道具 举报

发表于 2023-12-2 19:46:12 | 显示全部楼层    本楼为最佳答案   
在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组a,应当使用非闰年的月份天数数组b。以下是修正后的代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     int year,mon,day,days=0,i;
  6.     scanf("%4d%2d%2d",&year,&mon,&day);
  7.     if(mon<1||mon>12)
  8.     {cout<<"-1"<<endl;return 0;}
  9.     if(day>31) {cout<<"-1"<<endl;return 0;}
  10.     int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  11.     int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  12.     if(year%400==0||(year%4==0&&year%100!=0))
  13.     {
  14.         if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
  15.         else switch(mon)
  16.         {
  17.             case 1:
  18.             case 3:
  19.             case 5:
  20.             case 7:
  21.             case 8:   // 此处应为8
  22.             case 10:  // 此处应为10
  23.             case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
  24.         }
  25.         days=day;
  26.         for(i=1;i<mon;i++)
  27.         {
  28.             days+=a[i-1];
  29.         }
  30.     }
  31.     if(year%400!=0||(year%4!=0&&year%100==0))
  32.     {
  33.         if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
  34.         else switch(mon)
  35.         {
  36.             case 1:
  37.             case 3:
  38.             case 5:
  39.             case 7:
  40.             case 8:   // 此处应为8
  41.             case 10:  // 此处应为10
  42.             case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
  43.         }
  44.         days=day;
  45.         for(i=1;i<mon;i++)
  46.         {
  47.             days+=b[i-1]; // 此处应为b
  48.         }
  49.     }
  50.     cout<<days;
  51.     return 0;
  52. }
复制代码



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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 22:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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