1
警告!先のスポイラーズ!プロジェクトオイラー#19
次の情報が表示されますが、 リサーチを自分で行うことをお勧めします。
1月1900は月曜でした。 30日間は9月、 4月、6月、11月です。 残りのすべては31を持っています 2月だけを保存する、 雨が降っているか輝いていますか。 うるう年、29歳。
うるう年は、4で割り切れる年であれば、100で除算することはできませんが、400で割り切れる場合を除きます。20日(1月1日から2000年12月31日) )?
まず、単純な問題のようです。しかし、私が解決策を書いたとき、私は奇妙な問題に遭遇しました。答えは実際には171でなければなりませんが、私が何をしても173になります。私は繰り返しコードを見てきましたが、それにもかかわらずバグを見つけることはできません。
#include <iostream>
using namespace std;
int main() {
int count = 0, days_in_month, days_passed = 1;
for (int i = 1900; i <= 2000; i++) {
for (int j = 1; j <= 12; j++) {
if (j == 4 || j == 6 || j == 9 || j == 11) {
days_in_month = 30;
} else if (j == 2) {
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
days_in_month = 29;
} else {
days_in_month = 28;
}
} else {
days_in_month = 31;
}
if (days_passed % 7 == 0) {
count++;
}
days_passed += days_in_month;
}
}
cout << count << endl;
cin.ignore();
return 0;
}
誰も私のコードに間違いを感じることができますか?
コードを見るだけで、デバッガで1行ずつステップ実行しないでください。ある時点では、その動作は期待どおりに発散しなければなりません。 –
私がしたことは、すべてのデータを調べて、平日がループの最後に一致するかどうかを確認することでした。彼らがやった。それが私を悩ましている。 – wolx
説明をもう一度お読みください。特に「20世紀」の定義。 – Henrik