#34690: 請問如何求得[y1+1, y2-1]區間的閏年數


laquum (laquum)

學校 : 不指定學校
編號 : 229494
來源 : [114.43.59.45]
最後登入時間 :
2023-06-19 16:18:54
a468. 12439 - February 29 -- UVa12439 | From: [114.43.34.243] | 發表日期 : 2023-04-08 00:06

/* 我先將頭尾先處理掉,接下來要求年區間的閏年數

* 我的數學有點破想不出來,一直過不去case 18的坎...

* /

 

#include <iostream>
#include <string>

using namespace std;

bool isLeap(int yy)
{
    if(yy % 400 == 0)
        return true;
    if(yy % 4 == 0 && yy % 100 != 0)
        return true;
    return false;
}


int main()
{
    string m1;
    string comma;
    int d1;
    int y1, y2;
    int T;
    int k = 0;
    
    cin >> T;
    while(T--)
    {
        int leap = 0;
        cin >> m1 >> d1 >> comma >> y1;
        if(isLeap(y1))
        {
            if(m1.compare("January") == 0)
                leap++;
            else if(m1.compare("February") == 0)
                leap++;
        }
        
        cin >> m1 >> d1 >> comma >> y2;
        if(isLeap(y2) && y1 != y2)
        {
            if(m1.compare("February") == 0)
            {
                if(d1 == 29)
                    leap++;
            }
            else if(m1.compare("January") == 0){}
            else
                leap++;
        }
        

       /* Q: 如何正確地求出區間[y1+1, y2-1]的閏年數? */
        int uleap = (y2/4)-(y2/100)+(y2/400);
        int lleap = (y1/4)-(y1/100)+(y1/400);
        if(y1 != y2)
        {
            leap += ((uleap - lleap));
            if(isLeap(y1) && isLeap(y2))
                leap -= 1;
        }
        
        cout << "Case " << ++k << ": " << leap << '\n';
    }
    

    return 0;
}

 
#35010: Re: 請問如何求得[y1+1, y2-1]區間的閏年數


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a468. 12439 - February 29 -- UVa12439 | From: [118.160.208.34] | 發表日期 : 2023-05-02 08:39


            if(isLeap(y1) && isLeap(y2))
                leap -= 1;
        }


if(lsLeap(y2))

 
ZeroJudge Forum