応用情報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個入れて考える
  →それでも同じとき、はじめて、抽象的に考える