Open2
競プロでのバグ原因列挙
for文のインデックスを変更しない
(例) 1から10それぞれを2で割れる回数を表示するプログラム
// 期待する出力
// 0 1 0 2 0 1 0 3 0 1
// 間違い
for (int i = 1; i < 10; i++) {
int ans = 0;
while ( i % 2 == 0) {
ans++;
i /= 2;
}
cout << ans << ' ';
}
// 正しい
for (int i = 1; i < 10; i++) {
int ans = 0;
int j = i; // コピーする
while ( j % 2 == 0) {
ans++;
j /= 2;
}
cout << ans << ' ';
}
奇数判定
負の値を割った余りは負であることに注意
// 間違い
bool is_odd(int x) {
return (x%2 == 1);
}
// 正しい
bool is_odd (int x) {
return (x%2 == 1 || x%2 == -1);
}