次のプログラム中の 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
| 注文番号 | 購入された商品のリスト |
|---|---|
| 1 | A, B, D |
| 2 | A, D |
| 3 | A |
| 4 | A, B, E |
| 5 | B |
| 6 | C, E |
選択肢
- アa: arrayK[i] b: arrayM[i] c: allItemsの要素数
- イa: arrayK[i] b: arrayM[i] c: ordersの要素数
- ウa: arrayK[i] b: arrayM[i] c: otherItemsの要素数
- エa: arrayM[i] b: arrayK[i] c: allItemsの要素数
- オa: arrayM[i] b: arrayK[i] c: ordersの要素数
- カa: arrayM[i] b: arrayK[i] c: otherItemsの要素数
正解と解説
正解:オ a: arrayM[i] b: arrayK[i] c: ordersの要素数
内側のifは、注文に相手商品が含まれるという条件の中にさらに対象商品も含まれるという条件が入れ子になっている。したがって内側で増やすのは同時購入数のarrayM、外側で増やすのは相手商品の購入注文数のarrayKになる。関連度の式の分子にある全注文数は注文データの件数そのものなので、ordersの要素数が入る。
選択肢ごとの解説
- アMとKの役割が逆で、全注文数を商品の種類数にしている。
- イMとKが逆になっており、同時購入数と単独購入数が入れ替わる。
- ウMとKが逆で、全注文数も商品数になっている。
- エMとKの割当ては正しいが、全注文数を商品の種類数にしている点が誤り。
- オ内側でarrayM、外側でarrayKを増やし、全注文数はordersの要素数。すべて式の定義どおり。
- カMとKの割当ては正しいが、全注文数を相手商品の個数にしてしまっている。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問5
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数func1に与…2026年度 公開問題 科目B 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数complementは、引数として渡された8ビット型…2026年度 公開問題 科目B 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 次のプログラムは、…2026年度 公開問題 科目B 問1
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数changeは、10より大きい整数を引数nで受け取り…2025年度 公開問題 科目B 問2
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。