Contents
【問題】
【難易度】★★★★★(難しい)
図のフローチャートで表されるアルゴリズムについて,次の(a)及び(b)の問に答えよ。変数は全て整数型とする。
このアルゴリズム実行時の読込み処理において, \ \mathrm {n}=5 \ とし, \ \mathrm {a}[1]=2 \ , \ \mathrm {a}[2]=3 \ , \ \mathrm {a}[3]=8 \ , \ \mathrm {a}[4]=6 \ , \ \mathrm {a}[5]=5 \ とする。
(a) 図のフローチャートで表されるアルゴリズムの機能を考えて,出力される \ \mathrm {a}[5] \ の値を求めよ。その値として正しいものを次の(1)~(5)のうちから一つ選べ。
(1) \ 2 \ (2) \ 3 \ (3) \ 5 \ (4) \ 6 \ (5) \ 8 \
(b) フローチャート中の \ \mathrm {X} \ で示される部分の処理は何回行われるか。正しいものを次の(1)~(5)のうちから一つ選べ。
(1) \ 3 \ (2) \ 4 \ (3) \ 5 \ (4) \ 8 \ (5) \ 10 \
【ワンポイント解説】
アルゴリズムの問題でパズルゲームを解いているような問題です。ただし,問題を解くのにかなりの時間を要する上,ケアレスミスも発生しやすい問題なので,90分しかない試験時間でこの問題は選択しない方が良いと思います。
【解答】
(a)解答:(5)
下記プログラムの青字の通り,出力される \ \mathrm {a}[5] \ は \ 8 \ となります。
(b)解答:(1)
下記プログラムの赤字の通り, \ \mathrm {X} \ の回数は3回です。
図1のように各プロセスに番号をつけ,アルゴリズムに沿って解いていきます。
① \ \mathrm {n} \ を「読込み」します。⇒ \ \mathrm {n}=5 \
② \ \mathrm {a}[1] \ ~ \ \mathrm {a}[\mathrm {n}] \ を「読込み」します。⇒ \ \mathrm {a}[1]=2 \ , \ \mathrm {a}[2]=3 \ , \ \mathrm {a}[3]=8 \ , \ \mathrm {a}[4]=6 \ , \ \mathrm {a}[5]=5 \
③ \ \mathrm {i} \ を \ 1 \ とします。⇒ \ \mathrm {i}=1 \
④ \ \mathrm {j} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {j}=2 \
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[1]=2<\mathrm {a}[2]=3 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=3 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=3<\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[1]=2<\mathrm {a}[3]=8 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=4 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=4<\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[1]=2<\mathrm {a}[4]=6 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=5 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=5=\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[1]=2<\mathrm {a}[5]=5 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=6 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=6>\mathrm {n}=5 \ なので \ \mathrm {YES} \ へ
⑨ \ \mathrm {i} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {i}=2 \
⑩ \ \mathrm {i}>\mathrm {n}-1 \ かどうかを確認します。⇒ \ \mathrm {i}=2<\mathrm {n}-1=4 \ なので \ \mathrm {NO} \ へ
④ \ \mathrm {j}を \ \mathrm {i}+1とします。⇒ \ \mathrm {j}=3
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[2]=3<\mathrm {a}[3]=8 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=4 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=4<\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[2]=3<\mathrm {a}[4]=6 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=5 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=5=\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[2]=3<\mathrm {a}[5]=5 \ なので \ \mathrm {NO} \ へ
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=6 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=6>\mathrm {n}=5 \ なので \ \mathrm {YES} \ へ
⑨ \ \mathrm {i} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {i}=3 \
⑩ \ \mathrm {i}>\mathrm {n}-1 \ かどうかを確認します。⇒ \ \mathrm {i}=3<\mathrm {n}-1=4 \ なので \ \mathrm {NO} \ へ
④ \ \mathrm {j} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {j}=4 \
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[3]=8>\mathrm {a}[4]=6 \ なので \ \mathrm {YES} \ へ
⑥ \ \mathrm {m} \ を \ \mathrm {a}[\mathrm {i}] \ として \ \mathrm {a}[\mathrm {i}] \ を \ \mathrm {a}[\mathrm {j}] \ として \ \mathrm {a}[\mathrm {j}] \ を \ \mathrm {m} \ とします⇒ \ \mathrm {a}[3]=6 \ , \ \mathrm {a}[4]=8 \
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=5 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=5=\mathrm {n}=5 \ なので \ \mathrm {NO} \ へ
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[3]=6>\mathrm {a}[5]=5 \ なので \ \mathrm {YES} \ へ
⑥ \ \mathrm {m} \ を \ \mathrm {a}[\mathrm {i}] \ として \ \mathrm {a}[\mathrm {i}] \ を \ \mathrm {a}[\mathrm {j}] \ として \ \mathrm {a}[\mathrm {j}] \ を \ \mathrm {m} \ とします⇒ \ \mathrm {a}[3]=5 \ , \ \mathrm {a}[5]=6 \
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=6 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=6>\mathrm {n}=5 \ なので \ \mathrm {YES} \ へ
⑨ \ \mathrm {i} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {i}=4 \
⑩ \ \mathrm {i}>\mathrm {n}-1 \ かどうかを確認します。⇒ \ \mathrm {i}=4=\mathrm {n}-1=4 \ なので \ \mathrm {NO} \ へ
④ \ \mathrm {j} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {j}=5 \
⑤ \ \mathrm {a}[\mathrm {i}]>\mathrm {a}[\mathrm {j}] \ かどうかを確認します。⇒ \ \mathrm {a}[4]=8>\mathrm {a}[5]=6 \ なので \ \mathrm {YES} \ へ
⑥ \ \mathrm {m} \ を \ \mathrm {a}[\mathrm {i}] \ として \ \mathrm {a}[\mathrm {i}] \ を \ \mathrm {a}[\mathrm {j}] \ として \ \mathrm {a}[\mathrm {j}] \ を \ \mathrm {m} \ とします⇒ \ \mathrm {a}[4]=6 \ , \ \mathrm {a}[5]=8 \
⑦ \ \mathrm {j} \ を \ \mathrm {j}+1 \ とします。⇒ \ \mathrm {j}=6 \
⑧ \ \mathrm {j}>\mathrm {n} \ かどうかを確認します。⇒ \ \mathrm {j}=6>\mathrm {n}=5 \ なので \ \mathrm {YES} \ へ
⑨ \ \mathrm {i} \ を \ \mathrm {i}+1 \ とします。⇒ \ \mathrm {i}=5 \
⑩ \ \mathrm {i}>\mathrm {n}-1 \ かどうかを確認します。⇒ \ \mathrm {i}=5>\mathrm {n}-1=4 \ なので \ \mathrm {YES} \ へ
⑪ \ \mathrm {a}[1]~\mathrm {a}[\mathrm {n}] \ を「出力」します。⇒ \ \mathrm {a}[1]=2 \ , \ \mathrm {a}[2]=3 \ , \ \mathrm {a}[3]=5 \ , \ \mathrm {a}[4]=6 \ , \ \mathrm {a}[5]=8 \