新・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);
});
線をまたいだ 回数 ÷ 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)
}
});
実装例では 2 ✕ X ✕ (線をずらしてからまたいだ回数 ÷ 4) で計算していました 。
コメント