はじめに
タイトルにもある通り、基本情報技術者過去問題 平成30年秋期 午後問8 についての記事なんだけど、このサイトに書かれていた解説のある一文がずっと理解できない、って事態に陥った。
備忘録のために何が理解できなかったのかをここに書き残しておく。
理解できなかった箇所
理解できなかった箇所は、下記の赤文字部分である。
priHigh=2、priLow=1 以外なら何でも良いのですが、ここでは priHigh=3、priLow=2 とします。
何故理解できなかったのか
赤文字部分を読んだとき、僕は必死に priHigh=2、priLow=1 がダメな理由を考えたんだけど、ぱっとは思いつかなかった。
a に2以上が当てはまるのは理解できたけど、それは priHigh、priLow には関係ない。
なぜなら、2以上でなければならないのはあくまで括弧の内部にある演算子に対して加算する値のことで、加減算と乗除算とで加算する値のことではないからだ
結論
で、なぜ「priHigh=2、priLow=1 以外なら何でも良い」のかというと、ア と エ で被ってしまうからだ。
選択肢をみてみよう。
ア:priHigh以上
イ:priHigh+1以上
ウ:priHigh-priLow以上
エ:priHigh-priLow+1以上
仮に、priHigh=2、priLow=1にしてみると、アは 2、エは 2 - 1 + 1 = 2、で被ってしまうことが分かる。
これを、解説と同様に priHigh=3、priLow=2 とすると、アは 3、エは 3 - 2 + 1 = 2、でしっかり差分が出ることが分かる。
だから、問題としてpriHigh=2、priLow=1と定義することが禁止されているわけではなく、ただ効率的に悪いよって話。