【sim1】反復横跳び《新・Bランクup》

新・Bランクレベルアップ【シミュレーション 1】反復横跳び

【シミュレーション 1】反復横跳び コード 1/2

reader.on('close', () => {
   const [N, X, K] = lines[0].split(' ').map(Number);
   let ans = 0;  // 余分に移動した長さ(cm)
   for (let i = N * 4 + 1; i <= K; i++) {  // 線を遠ざけてから K 回目までの間
      if (i % 4 === 0 || i % 4 === 3) {  // またいだ回数 % 4 が 0 または 3 なら
         ans += X;  // X cm 余分に移動
      }
   }
   console.log(ans);
});
hogeちゃんの画像

線をまたいだ 回数 ÷ 4 のあまりが 0 のときと 3 のときにX ㎝ 多く移動することになるので 条件分岐して 順次 X ㎝ 加算しました。

【シミュレーション 1】反復横跳び コード 2/2  (C++実装例参照)

reader.on('close', () => {
   const [N, X, K] = lines[0].split(' ').map(Number);
   if (K % 4 === 3) {  // またいだ回数 % 4 が 3 の場合のみ
      console.log(2 * X * (Math.floor((K - 4 * N) / 4)) + X); 
  // 余分に移動するのは 2 ✕ X ✕ (線をずらしてからまたいだ回数 ÷ 4) + X
   } else {  // それ以外は…
      console.log(2 * X * (Math.floor((K - 4 * N) / 4)));
  // 余分に移動するのは 2 ✕ X ✕ (線をずらしてからまたいだ回数 ÷ 4)
   }
});
hogeちゃんの画像

実装例では 2 ✕ X ✕ (線をずらしてからまたいだ回数 ÷ 4) で計算していました 。

コメント