応用情報22年秋 午前 問7
【中分類】
アルゴリズムとプログラミング−2.アルゴリズム−(1)流れ図??
【問題を解く前に】
問5で書いた、「問題文の読み方」に沿って考えると
1.はじめにざっと読み、何を聞いているか、確認する
→aに何が入る?
2.解答群をみて、解答のポイントをはっきりさせる。
→< か > か?
ループの終わりはM−1?M?M+1?
3.解答を解くための条件をおさえる。
→xが等しくなる
ということです。ここで、2番のように、Mという抽象的な数字が入っている場合、抽象的に考えていると、なにがなんだか、よくわかんなくなってきます。
これは、情報処理試験でも、他の試験でも、実務的にでもそうなのですが・・・
・抽象的な数字があるときは、具体的に数字を入れてしまって考える
ことが、大切です。
【解き方】
今回、とりあえずM=4とします。
左側は、そうすると、
n:4,−1,1のループとなり、nが4、3、2のときループするので、
x=24
となります(わかんない人は、M=4で確かめてみてね)
さて、右の流れ図において
●仮に(ア)だったとすると
1回目の判定条件:の直前x=1,n=2,
2<4 Yes
これで、終了するのでX=1 ・・・ 違う
●仮に(イ)だったとすると
1回目の判定条件:の直前x=1、N=2
2 > 4−1 = 3 NO
2回目の判定条件:の直前x=2、N=3
3 > 4−1 = 3 NO
3回目の判定条件:の直前x=6、N=4
4 > 4−1 = 3 YES
これで、終了するのでX=6 ・・・ 違う
●仮に(ウ)だったとすると
1回目の判定条件:の直前x=1、N=2
2 > 4 NO
2回目の判定条件:の直前x=2、N=3
3 > 4 NO
3回目の判定条件:の直前x=6、N=4
4 > 4 NO
4回目の判定条件:の直前x=24、N=5
5 > 4 YES
これで、終了するのでX=24 ・・・ あってる
解答の「候補」・・・ほかにも24が出るかも?
なので、(エ)もやる
●仮に(エ)だったとすると
1回目の判定条件:の直前x=1、N=2
2 > 4+1=5 NO
2回目の判定条件:の直前x=2、N=3
3 > 4+1=5 NO
3回目の判定条件:の直前x=6、N=4
4 > 4+1=5 NO
4回目の判定条件:の直前x=24、N=5
5 > 4+1=5 NO
5回目の判定条件:の直前x=120、N=6
6 > 4+1=5 YES
これで、終了するのでX=120 ・・・ 違う
すくなくとも、M=4のケースを満たさなければ
いけないはずであり、そのケースを満たすのは
(ウ)しかない。
【答え】
(ウ)
【解き終わって】
なお、今回はうまい数字を入れたので、答えが一発で見つかりましたけど、
変な数字をいれて、同じ答えになってしまう可能性もあります。
なので、答えが一致したからといって、そこでやめず、すべてのケースを
調べる必要があります。
そして、2つ以上同じ答えが出てきた場合は、さらに絞り込むため、
2個か3個、別の数字を代入し、それでも絞れなかったら、はじめて
抽象的に考えます。
そのときは、具体的な事例があるので、かなり考えやすくなっているはずです。
実務上でも具体的な数値、ケースについて考えるというのは、とてつもなく
大事なことで、ユースケースシナリオをわざわざ考えるのも、そのためです。
(抽象的なユースケースでは出来そうに思えても、現実的に人の名前や場所、
個数や数値をいれて考えると・・・あ、無理だと気づく)
また、テストでは具体的にテストケースをいれて確認するため、このように
具体的に考える作業を設計でしておかないと、ケースの異常さに気づかずに
開発して、テストで具体的な値を入れたとき、おかしくなったりします。
よく、結合テストでこのことが起こるのですが、そうすると、かなりの
手戻りになって、デスマーチ化します。
なので、数字をいれて考えるということは、試験だけでなく、情報処理全般
として、大事なことです。
【受験テクニック】
・抽象的な数字があるときは、具体的に数字を入れてしまって考える
→全部のケース(選択肢)について計算する。途中でやめない
→同じ値になるケースが2つ以上のときも
→同じ値になるケースが2つ以上のときは、他の値を2、3個入れて考える
→それでも同じとき、はじめて、抽象的に考える