警告!スポイラーが先!
次の情報が提供されますが、自分で調査することをお勧めします。
1900 年 1 月 1 日は月曜日でした。30 日間には、9 月、4 月、6 月、11 月があります。残りはすべて 31 で、2 月だけを保存します。これには 28 があります。そしてうるう年には、29。
うるう年は 4 で割り切れる年に発生しますが、400 で割り切れない限り、1 世紀には発生しません。
最初は、簡単な問題のように見えます。しかし、解決策をコーディングしていると、奇妙な問題に遭遇しました。実際には、答えは 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;
}
誰かが私のコードに何か問題があることに気付くことができますか?