我在做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);
可能是[你的while while循環]的問題(http://stacked-crooked.com/view?id=a8d4f159dc8507e9e365456159419745)。 – Rapptz
我沒有答案。我無法理解你的方法,但它看起來很有趣。你能解釋一下這句話嗎:「給定年Xdays的數量是一個重複序列{2,2,2,1,2,1,2}」,或者指出我理解這個的來源? – rivu
首先,您的[閏年算法](http://en.wikipedia.org/wiki/Leap_year#Algorithm)不正確。 – Blastfurnace