#22469: 求幫忙:WAline1


Stanley1103 (unknown_user)

學校 : 臺北市私立延平高級中學
編號 : 103354
來源 : [180.217.40.10]
最後登入時間 :
2023-12-30 21:45:49
a263. 日期差幾天 -- 板橋高中練習題 | From: [1.200.166.123] | 發表日期 : 2020-09-06 21:48

求幫忙:WAline1

 

 

#include <iostream>

#include<cmath>

using namespace std;

 

int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    int y1,m1,d1,y2,m2,d2,month_map[12]{31,0,31,30,31,30,31,31,30,31,30,31};

    while(cin>>y1>>m1>>d1>>y2>>m2>>d2)

    {

        int ans_y1=(y1-1)*365+(y1-1)/4-(y1-1)/100+(y1-1)/400;

        int ans_y2=(y2-1)*365+(y2-1)/4-(y2-1)/100+(y2-1)/400;

        int year=abs(ans_y1-ans_y2);

        int month1=28,month2=28,month,day=abs(d1-d2);

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

        month1=29;

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

        month2=29;

        for(int i=0;i<m1;i++)

        {

            month1+=month_map[i];

        }

        for(int i=0;i<m2;i++)

        {

            month2+=month_map[i];

        }

        month=abs(month1-month2);

        cout<<year+month+day<<"\n";

    }

}

 

 
#22577: Re:求幫忙:WAline1


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a263. 日期差幾天 -- 板橋高中練習題 | From: [218.161.41.139] | 發表日期 : 2020-09-17 13:12

看起來問題不少,比如

  • d1, d2 不能直接相減取絕對值
  • 算當年內過了幾天時,沒過完二月不用把 28 或 29 加上去
  • 兩個日期分別在該年內過了幾天,也不能直接相減取絕對值

 

常見的算法,是分別算出兩個日期,距離 0000/12/31 過了幾天 (0001/1/1 為一天),再把天數相減後取絕對值

給你幾組測資

2000 1 1
1999 12 31
2000 1 31
2000 2 1
1999 1 1
2000 1 1
2000 1 1
2001 1 1

答案應該是

1
1
365
366

還有疑惑再提出 :)

 
ZeroJudge Forum