Open2

競プロでのバグ原因列挙

pastapasta

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 << ' ';
  }
pastapasta

奇数判定

負の値を割った余りは負であることに注意

// 間違い
bool is_odd(int x) {
  return (x%2 == 1);
}

// 正しい
bool is_odd (int x) {
  return (x%2 == 1 || x%2 == -1);
}