
基本情報技術者試験 令和5年度 公開問題 科目B、全6問のうちの問4。
出典:令和5年度 基本情報技術者試験 公開問題 科目B 問4(プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。空欄は[ ]で表した)
次の
関数 add は,
手続 test は,
大域: 整数型の配列: hashArray○論理型: add(整数型: value)整数型: i ← calcHash1(value)if (hashArray[i] = -1)hashArray[i] ← valuereturn trueelsei ← calcHash2(value)if (hashArray[i] = -1)hashArray[i] ← valuereturn trueendifendifreturn false○整数型: calcHash1(整数型: value)return (value mod hashArrayの要素数) + 1○整数型: calcHash2(整数型: value)return ((value + 3) mod hashArrayの要素数) + 1○test()hashArray ← {5個の -1}add(3)add(18)add(11)
- ア{-1, 3, -1, 18, 11}
- イ{-1, 11, -1, 3, -1}
- ウ{-1, 11, -1, 18, -1}
- エ{-1, 18, -1, 3, 11}
- オ{-1, 18, 11, 3, -1}
答えと解説を開く
正解はエです。
hashArray は
ほかの選択肢が違う理由
- ア18 を
calcHash1 の 結果の 4 番目に 入れ、 3 を 2 番目に 入れています。 先に add(3) が 4 番目を 取るので、 18 の ほうが calcHash2 で 2 番目に 回ります。 - イ18 が
入っていません。 18 は calcHash2 で 2 番目に 入り、 11 は その 2 番目が ふさが っているので 5 番目に 回ります。 - ウ3 が
入っておらず、 11 と 18 の 位置も 違います。 3 は 最初に 4 番目に 入ります。 - オ11 を
3 番目に 入れています。 calcHash2(11) は (14 mod 5) + 1 = 5 なので、 11 は 5 番目です。
仕組み
ハッシュ表は、
違う