代码存在问题,请找一下问题

题目:跑步锻炼
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1日周六(含)到 2020年 10 月 1日周四(含)。请问这段时间小蓝总共跑步多少千米

#include
//这段代码的答案一直是8876,可以帮忙找找问题吗?
int main()
{
    int i,j,k,num=0,sum=0;
    int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int weak=6;
    for(i=2000;i<=2020;i++)
    {
        if((i%400==0)||(i%100!=0 && i%4==0)){
            month[2]=29;
        }
        else{
            month[2]=28;
        }
        for(j=1;j<=12;j++)
        {
            for(k=1;k<=month[j];k++)
            {
                if(weak==6 && k!=1){
                    num++;
                }
                sum++;
                weak++;
                if(weak==8){
                    weak=1;
                }
            }
            num++;
        }
    }
    sum -= 91;
    num -= 15;
    sum +=num;
    
    printf("%d",sum);
    return 0;
}


#include<stdio.h>
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int year=2000,week=6,count=0,mth=1,day=1;
    while(1)
    {
        count++;
        if(day>a[mth])
        {
            if(mth==12)
            {
            mth=1;year++;
            }
            else if(mth+1==2)
            {
                if(year%4==0)
                a[mth+1]=29;
                else
                a[mth+1]=28;
                mth++;    
            }
            else
            mth++;
            day=1;
        }
        if(week==1||day==1)
            count++;
        if(year==2020&&mth==10)
            break;
        if(week==7)
        {
            week=1;
         } 
         else
         {
             week++;
         }
        day++;        
        
    }
    printf("%d",count);
  } 

该回答引用ChatGPT
参考一下 我这个 :

#include <stdio.h>

int main() {
    int days = 0, km = 0;

    for (int year = 2000; year <= 2020; year++) {
        for (int month = 1; month <= 12; month++) {
            int days_in_month = 31;
            if (month == 2) {
                days_in_month = (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) ? 29 : 28;
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                days_in_month = 30;
            }

            for (int day = 1; day <= days_in_month; day++, days++) {
                if (day == 1 || (days + 5) % 7 == 0) {
                    km += 2;
                } else {
                    km += 1;
                }
            }
        }
    }

    printf("小蓝总共跑了 %d 千米\n", km);
    return 0;
}

第 29 行,num++ 应该删掉

  1. 家人们,以后做题千万要注意看题呀,别像我,明明是周一和初一,我这个傻子竟然去算周六和初一去了,这个代码里只要把判断语句里的6改成1就可以了