PTA循环,从1900年以来的第星期

任务描述
X同学出生在“2002年01月07日”,已知1900年1月1日是星期一,你知道他出生的那天是星期几吗?随意给你一个日期,你知道是星期几吗?

输入格式:
输入为一行,由减号分隔的三个整数,形如:Y-M-D,表示一个日期。测试数据日期均为1900年以来的合法日期。

输出格式:
请输出该日期是星期几,星期一至星期日分别用1至7表示。

#include
int main()
{
    int y,m,d,net,num,sum=0;
    scanf("%d-%d-%d",&y,&m,&d);
    net=(y-1900)/4;
    num=(y-1900)%4;
    if(sum>=1)
    sum=net*1460+(num-1)*365;
    else
    sum=net*1460;
    switch(m)
    {
            case 12:sum+=30;
            case 11:sum+=31;
            case 10:sum+=30;
            case 9:sum+=31;
            case 8:sum+=31;
            case 7:sum+=30;
            case 6:sum+=31;
            case 5:sum+=30;
            case 4:sum+=31;
            case 3:sum+=28;
            case 2:sum+=31;
            case 1:sum+=d;
    }
    sum=sum%7;
    if(sum==0)
        sum=7;
    printf("%d",sum);
}

问题好多
1.sum初始成0了,那么其实0代表星期一
你的结果直接+1就对了,不要判断如果是0就改成7,那就错了
要么你sum的初始值改成1
2.你为什么只加365,闰年哪里去了
3.你的if里的判断条件为什么是sum>=1,这里sum明显是0呀,恒为假
先写伪代码,把逻辑捋清楚再写代码,你现在不是代码不会写,是根本没厘清思路

正确代码如下,如果有用,请点击一下采纳谢谢:

#include<iostream>
using namespace std;
int main() {
    int y,m,d;
    scanf("%d-%d-%d",&y,&m,&d);
    
    int sum=0;
     
    for(int i=1900; i<y; i++) {
        if((i%4==0&&i%100!=0)||(i%400==0))
            sum=sum+366;
        else
            sum=sum+365;
    }
 
    int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int br[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 
    for(int i=0;i<m-1;i++){
        if((y%4==0&&y%100!=0)||(y%400==0)){
            sum+=r[i];
        }else{
            sum+=br[i];
        }
    }
    sum+=d;
    //printf("sum=%d\n",sum);
    
    int t;
    t=sum%7;
    if(t==0){
        cout<<7;
    }else{
        cout<<t;
    }
    return 0;
}