基本情報処理試験2024年度の練習問題、問4の解説

基本情報処理試験2024年度の練習問題の解説が見つからなかったので、
問題文をAIに読み込ませた解説に対して、一部自分のメモを記載。

解答群

  • ア: 実行されない

  • イ: 1 回実行される

  • ウ: 2 回実行される

  • エ: 3 回実行される

コード

○整数型の配列: merge(整数型の配列: data1, 整数型の配列: data2)
  整数型: n1 ← data1の要素数
  整数型: n2 ← data2の要素数
  整数型の配列: work ← {(n1 + n2)個の 未定義の値}
  整数型: i ← 1
  整数型: j ← 1
  整数型: k ← 1

  while ((i ≦ n1) and (j ≦ n2))
    if (data1[i] ≦ data2[j])
      work[k] ← data1[i]
      i ← i + 1
    else
      work[k] ← data2[j]
      j ← j + 1
    endif
    k ← k + 1
  endwhile

  while (i ≦ n1)
    work[k] ← data1[i]
    i ← i + 1
    k ← k + 1
  endwhile

  while (j ≦ n2)
    work[k] ← data2[j]  /*** α ***/
    j ← j + 1
    k ← k + 1
  endwhile

  return work

解説

merge({2, 3}, {1, 4}) を実行する際の手順を追います:

  1. 初期状態:

    • data1 = {2, 3}

    • data2 = {1, 4}

    • n1 = 2

    • n2 = 2

    • work = {未定義, 未定義, 未定義, 未定義}

    • i = 1, j = 1, k = 1

  2. 最初の while ループ(while ((i ≦ n1) and (j ≦ n2))):

    • data1[1] (2) > data2[1] (1) なので、work[1] = data2[1]、j = 2、k = 2 work=[1]

    • data1[1] (2) ≦ data2[2] (4) なので、work[2] = data1[1]、i = 2、k = 3、work=[1,2]

    • data1[2] (3) ≦ data2[2] (4) なので、work[3] = data1[2]、i = 3、k = 4、work=[1,2,3)

  3. i > n1 になるため、最初の while ループを終了。<And条件なので、どちらかの条件がFalseになるとループを抜ける。

  4. 次の while ループ(while (i ≦ n1))は実行されない(i = 3 > n1 = 2)。

  5. 最後の while ループ(while (j ≦ n2)):

    • j = 2 で、work[4] = data2[2] (4)、j = 3、k = 5 work=[1,2,3,4]

結果として、/*** α ***/ の行(work[k] ← data2[j])は 1 回実行される ので、正解は「イ」。



この記事が気に入ったらサポートをしてみませんか?