解法大全:
1)直接算:
//AC (3ms, 332KB)
片段程式碼:
for(int i=a;i<=b;i++)
{
ans+=leap(i);
}
2)數學演算法:
//AC (9ms, 324KB)
類似於種樹概念
先找最大閏年(但不大於輸入)和最小閏年但要記得用額外的迴圈處例外(100的倍數和400的倍數)
片段程式碼:
//i為最大閏年
cin>>a>>b;
if(a>b)swap(a,b);//防止第一個數字大於第二個數字
int i;
for(i=b;i>=a;i--)
{
if(leap(i))break;
}
//代表a,b間沒有閏年
if(i<a){cout<<ans<<endl;return 0;}
//處理例外
int hundred=0,four_hundred=0;
for(int k=j;k<=i;k++)
{
if(k%100==0)hundred++;
if(k%400==0)four_hundred++;
}
ans=ans-hundred+four_hundred;
至於閏年的定義和副程式碼可以自己慢慢想