次のプログラム中の a ~ c に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 一度の注文で購入された商品のリストを、注文ごとに記録した注文データがある。表に、注文データの例を示す。 注文データから、商品xと商品yとが同一の注文で購入されやすい傾向を示す関連度Lxyを、次の式で計算する。 Lxy = (Mxy × 全注文数) / (Kx × Ky) ここで、Mxyは商品xと商品yとが同一の注文で購入された注文数、Kxは商品xが購入された注文数、Kyは商品yが購入された注文数を表す。表の例では、MABが2、全注文数が6、KAが4、KBが3であるので、商品Aと商品Bの関連度LABは、(2 × 6) / (4 × 3) = 1.0である。 手続putRelatedItemは、大域変数ordersに格納された注文データを基に、引数で与えられた商品との関連度が最も大きい商品のうちの一つと、その関連度を出力する。プログラムでは、商品は文字列で表し、注文は購入された商品の配列、注文データは注文の配列で表している。注文データには2種類以上の商品が含まれるものとする。また、注文データにある商品以外の商品が、引数として与えられることはないものとする。 〔プログラム〕 // 注文データ(ここでは表の例を与えている) 大域: 文字列型配列の配列: orders ← {{"A", "B", "D"}, {"A", "D"}, {"A"}, {"A", "B", "E"}, {"B"}, {"C", "E"}} ○putRelatedItem(文字列型: item) 文字列型の配列: allItems ← ordersに含まれる文字列を 重複なく辞書順に格納した配列 // 表の例では {"A", "B", "C", "D", "E"} 文字列型の配列: otherItems ← allItemsの複製から値がitemである 要素を除いた配列 整数型: i, itemCount ← 0 整数型の配列: arrayK ← {otherItemsの要素数個の0} 整数型の配列: arrayM ← {otherItemsの要素数個の0} 実数型: valueL, maxL ← −∞ 文字列型の配列: order 文字列型: relatedItem for (orderにordersの要素を順に代入する) if (orderのいずれかの要素の値がitemの値と等しい) itemCountの値を1増やす endif for (iを1からotherItemsの要素数まで1ずつ増やす) if (orderのいずれかの要素の値がotherItems[i]の値と等しい) if (orderのいずれかの要素の値がitemの値と等しい) a の値を1増やす endif b の値を1増やす endif endfor endfor for (iを1からotherItemsの要素数まで1ずつ増やす) valueL ← (arrayM[i] × c ) ÷ (itemCount × arrayK[i]) /* 実数として計算する */ if (valueLがmaxLより大きい) maxL ← valueL relatedItem ← otherItems[i] endif endfor relatedItemの値とmaxLの値をこの順にコンマ区切りで出力する

入れ子の内側が同時購入数M、外側が購入注文数K

頻出基本情報技術者試験2024年度 公開問題 科目B5/アルゴリズムとプログラミング / アルゴリズム

注文番号購入された商品のリスト
1A, B, D
2A, D
3A
4A, B, E
5B
6C, E

選択肢

正解と解説

正解: a: arrayM[i] b: arrayK[i] c: ordersの要素数

内側のifは、注文に相手商品が含まれるという条件の中にさらに対象商品も含まれるという条件が入れ子になっている。したがって内側で増やすのは同時購入数のarrayM、外側で増やすのは相手商品の購入注文数のarrayKになる。関連度の式の分子にある全注文数は注文データの件数そのものなので、ordersの要素数が入る。

選択肢ごとの解説

出典:令和6年度 公開問題 基本情報技術者試験 科目B 問5(IPA)

同じ分野の他の問題

最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。