ITパスポート試験
令和5年 第60問
問60
手続printArrayは、配列integerArrayの要素を並べ替えて出力する。手続printArrayを呼び出したときの出力はどれか。ここで、配列の要素番号は1から始まる。
[プログラム]
○printArray()
整数型: n, m
整数型の配列: integerArray ←{2, 4, 1, 3}
for(nを1から(integerArrayの要素数 − 1)まで1ずつ増やす)
for(mを1から(integerArrayの要素数 − n)まで1ずつ増やす)
if(integerArray[m] > integerArray[m + 1])
integerArray[m]とintegerArray[m + 1]の値を入れ替える
endif
endfor
endfor
integerArrayの全ての要素を先頭から順にコンマ区切りで出力する
1, 2, 3, 4 | |
1, 3, 2, 4 | |
3, 1, 4, 2 | |
4, 3, 2, 1 |
(令和5年 ITパスポート試験 第60問 テクノロジ系/アルゴリズムとプログラミング)
解説
この問題の正解率:30%(やや低い)
解き方(トレースの流れ)
初期状態: {2, 4, 1, 3}
n = 1 のループ処理
比較 2 vs 4 → no swap → {2, 4, 1, 3}
比較 4 vs 1 → swap → {2, 1, 4, 3}
比較 4 vs 3 → swap → {2, 1, 3, 4}
n = 2 のループ処理
比較 2 vs 1 → swap → {1, 2, 3, 4}
比較 2 vs 3 → no swap
n = 3 のループ処理
比較 1 vs 2 → no swap
ループ完了 → ソートされた配列 {1, 2, 3, 4} を出力

【ワンポイントアドバイス】
擬似言語の問題では「実際に動かしてみる」=トレースが有効です。
- 初期配列に注目
- forの範囲を確認
- if文で swap があるかどうか確認