问题标题: 1367以后这题70分,求大神带我飞,三个点没超时,答案错误

0
0
已解决
夏子健
夏子健
初级光能
初级光能
#include<iostream>
#include<cstdio>
using namespace std;
int c_days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{   
    int year,month,day,days;
    scanf("%04d%02d%02d%d",&year,&month,&day,&days);
    if((year%4==0 && year%100!=0) || (year%400==0)) 
    c_days[2]++;
    day+=days;
    while(day>c_days[month])
    {   
        day-=c_days[month];
        month++;
        if((year%4==0 && year%100!=0) || (year%400==0)) 
        c_days[2]++;
        if(month>12)
        {
            year++;
            month=1;
        }
    }
    printf("%04d%02d%02d",year,month,day);
    return 0;
}

 


1
已采纳
陆姗姗
陆姗姗
资深守护
资深守护

你的第9、10行和第16、17行的

if((year%4==0 && year%100!=0) || (year%400==0))

c_days[2]++;

每次碰到闰年都会把c_days[2]++;

c_days[2]的值只加不减是不对的

我们只需要在遇到闰年的时候吧c_days[2]的值临时+1就可以了,其他的时候应该恢复c_days[2]=28;

0
0
0
我要回答