
基本情報技術者試験基礎・応用
条件を読む・根拠を説明する
上書きしながら条件を満たす値を残す
条件を整理し、答えを選んでから解き方を確認しましょう。
非負の値だけを元の順に配列前方へ詰める。添字は1始まり。代入の右辺は実行時の値。 A = [3, −1, 0, −2, 5] w ← 1 for r = 1 to 5 if A[r] ≥ 0 A[w] ← A[r] w ← w + 1 endif endfor length ← w − 1 for j = length + 1 to 5 A[j] ← 0 endfor 終了時のlengthとAはどれか。
答え・解き方を読む
3、[3,0,5,0,0]
図で見る
読む位置と書く位置を別々に進める
配列の箱内は値でなく1始まりの位置の例です。読み位置rの値を条件判定し、残す場合だけ書き位置wへ移してwを進めます。上書きが後の読取りへ与える影響も追います。
図は問題の関係を整理する模式図です。記号には各問題の数値を当てはめます。寸法・面積・時間の縮尺や、実施工の全条件は表していません。
考える順序
- 1残す条件は0以上なので3,0,5の3個
- 2書込位置wは読込位置rを追い越さず未読データを壊さない
- 3length=3に確定後、残る位置4,5だけを0にする
選択肢ごとの理由
- 正解 · 3、[3,0,5,0,0]
残す条件は0以上なので3,0,5の3個。書込位置wは読込位置rを追い越さず未読データを壊さない。length=3に確定後、残る位置4,5だけを0にする。
- 比較 · 2、[3,5,0,0,0]
0も残す条件なので2個ではありません。
- 比較 · 3、[3,0,0,0,0]
読込前の5を消す処理はなく位置3へ保存されます。
- 比較 · 4、[3,0,5,0,0]
最後のwは次の空き位置4で長さはw−1です。