FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER
基本情報技術者の問題解説:次の二次元配列処理を実行したとき、戻り値はどれか。 整数型の…
問題
次の二次元配列処理を実行したとき、戻り値はどれか。
整数型の二次元配列: m ← {{3,1,4}, {2,5,0}, {6,2,7}}
整数型: i, j, count ← 0
for (i を 2 から 3 まで 1ずつ増やす)
for (j を 2 から 3 まで 1ずつ増やす)
if (m[i][j] > m[i - 1][j] and m[i][j] > m[i][j - 1])
count ← count + 1
endif
endfor
endfor
return count- ア 1
- イ 2(正解)
- ウ 3
- エ 4
出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.2 科目B範囲
正解と解説
正解:2
調べるのはi=2〜3,j=2〜3の4か所だけです。各位置で、上の値m[i-1][j]と左の値m[i][j-1]の両方より大きい場合だけcountを増やします。
| 位置 | 値 | 上/左 | count |
|---|---|---|---|
| (2,2) | 5 | 1/2 | 1 |
| (2,3) | 0 | 4/5 | 1 |
| (3,2) | 2 | 5/6 | 1 |
| (3,3) | 7 | 0/2 | 2 |
条件を満たすのは(2,2)と(3,3)なので2です。斜め上ではなく、上と左を見る点に注意してください。
選択肢の見分け方:1は(3,3)を見落とした値、3や4は片方の条件だけで数えた誤りです。and条件なので、上と左の両方より大きい必要があります。
境界条件の着目点:ループがi,jともに添字2から始まるのは偶然ではありません。1から回すとm[i-1][j]やm[i][j-1]が配列の外を指してしまうため、上と左の隣がそろう内側だけを走査して範囲外アクセスを防いでいます。だから1行目と1列目は中心としては一度も判定されません。
この問題について
公開問題・サンプル問題の形式、擬似言語記法、アルゴリズム読解・トレース・空欄補充・セキュリティ事例判断の傾向を参考にした独自問題です。本文・数値・選択肢は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。