2013-02-02 41 views
-1

我在做Project Euler #19。這顯然是一個微不足道的問題,如果你只是想逐月循環,並應用一些高中模塊算術,但我嘗試一種不同的方法,只是爲了好玩。歐拉項目中的關閉1錯誤19

我注意到1901年1月/ 2月1日不是星期天,也不是2001年1月/ 2月1日,因此我可以從3月1日開始查看我的日曆年。使用基本的模塊化算術,很容易看出,如果閏年沒有不存在,那麼給定年份中Xdays的數量是重複序列{2,2,2,1,2,1,2},因爲365是全等1(mod 7)。因此,考慮一個閏年會導致序列中的2個元素跳躍。所以我寫了這個代碼,完成問題:但是我得到172如果答案是171任何人看到我已經錯了

const unsigned s[7] = {2,2,2,1,2,1,2}; 
unsigned n = 0; 
unsigned y = 1901; 
unsigned c = 0; 
do { 
    c=c%7; 
    n+=s[c]; 
    ++y; 
    c += ((y%4!=0)||(y%400==0) ? 1 : 2); 
} while (y<2001); 
std::cout << n << std::endl; 

注意:請不要留下1200/7評論。

固定:用c += ((y%400==0)||((y%4==0)&&(y%100!=0)) ? 2 : 1);

+1

可能是[你的while while循環]的問題(http://stacked-crooked.com/view?id=a8d4f159dc8507e9e365456159419745)。 – Rapptz

+0

我沒有答案。我無法理解你的方法,但它看起來很有趣。你能解釋一下這句話嗎:「給定年Xdays的數量是一個重複序列{2,2,2,1,2,1,2}」,或者指出我理解這個的來源? – rivu

+1

首先,您的[閏年算法](http://en.wikipedia.org/wiki/Leap_year#Algorithm)不正確。 – Blastfurnace

回答

1

編輯更換:關於閏年規則。

閏年規則只有一個更特殊的情況。

一年是閏年,如果它是:

  • 被4整除
    • 但不能整除100
      • 除了當它也是400
    整除

有時我希望我們有公制日曆。兆字節和千字節,有人嗎?


也許你對閏年規則有些困惑?

從你的鏈接:

閏年一年發生在任何一年能被4整除,但不能在一個世紀,除非它是整除400

所以每年被400整除閏年。您的代碼中的條件反轉。