シミュレーション《Cランク UP メニュー》

Cランクレベルアップメニュー【条件を満たす最小の自然数・シミュレーションの練習・シミュレーション】

【STEP: 1】コード

let i = 10000;
while (i % 13 !== 0) {  // i が 13 で割り切れない間…
   i++;  // i を加算
}
console.log(i);  // i を出力
hogeちゃんの画像

while文 を使って i % 13 === 0 になるまでループ。

【STEP: 2】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const [a, b] = lines[1].split(' ').map(Number);
   let paiza = 1;
   let kyoko = 1;
   let count = 0;  // 操作回数
   while (kyoko <= n) {  // kyokon 以下の間
      kyoko += paiza * a;  // パイザの番 → 京子 + パイザ ✕ a
      paiza += kyoko % b;  // 京子の番 → パイザ + 京子 mod b
      count++;  // 操作回数
   }
   console.log(count);
});
hogeちゃんの画像

while文 を使って kyoko > n になるまでループ。

【FINAL】コード1

reader.on('close', () => {
  let H = Number(lines[0]);
  const paiza_d = [];
  const monster_d = [];
  let [turn, m, p] = [true, 0, 0];
  while (H > 0) {
    let attack = 1;
    if (turn) {
      p++;
      if (p > 2) {
        attack = paiza_d[p - 2] + paiza_d[p - 3];
      }
      monster_d.push(attack);
    } else {
      m++;
      if (m > 2) {
        attack = (monster_d[m - 2] * 2) + monster_d[m - 3];
      }
      H -= attack;
      paiza_d.push(attack);
    }
    turn ? turn = false : turn = true;
  }
  console.log(m);
});
hogeちゃんの画像

while文 を使って H <= 0 になるまでループ。

【FINAL】コード2

reader.on('close', () => {
  let H = Number(lines[0]);
  const paiza_d = [];
  const monster_d = [];
  let count = 0;
  while (H > 0) {
    let attack1 = 1;
    let attack2 = 1;
    if (count >= 2) {
      attack1 = paiza_d[count - 1] + paiza_d[count - 2];
      attack2 = (monster_d[count - 1] * 2) + monster_d[count - 2];
    }
    monster_d.push(attack1);
    paiza_d.push(attack2);
    H -= attack2;
    count++;
  }
  console.log(count);
});
hogeちゃんの画像

解答コード例 を参照し コードを整理しました。

コメント