スゴ技

平成23年度 特別 基本情報技術者試験 【問9】(その1)

Blog: |

ブログの次男こと宮本です.

暑いです.なんでもこの夏一番の暑い朝だったそうです.こう暑いとなかなか勉強にも身が入りませんが,皆さんはいかがお過ごしでしょうか.

さて,先日に特別試験の合格発表があったようです.この機会に取得できた人は次を目指して頑張りましょう.というわけで,残った解説を書くことにします.午後問題の問9,C言語の問題です.一見すると,問題文が長く,ややこしそうに思えますが,まずは設問を見て何が問われているのかを確認してから問題を読むようにしましょう.特にややこしいのが,座席の列名がABCであるにもかかわらず,座席の種別にもABCが使われていることです.また,列ごとに座席数も異なりますが,このあたりについては詳しく言及されていません.まぁあまり重要でないということなのでしょう.

【設問1】 一言でいえば,穴埋め問題です.4か所の空欄を題意に合うように埋めていきます.では一つ一つ見ていきましょう.

まず空欄aですが,2重のforループの内側にあります.外側のforは,座席の列A~Zまでを回す単純なループです.内側のforは,各列の0~末尾までを回します.列ごとの席数は一定ではないので,末尾を表す’\0’が見つかるまで,というのを継続条件にしています.問題に関連するif文のうち外側のものは2つの条件の論理積で,指定の席が希望の種別(S/A/B/C)で,かつ,空席であれば,というものです.内側のif文はcntという変数で予約できそうな座席数をカウントし,それが引数にある希望座席数numを満たせば,空欄aを実行してbreakするというものです.実はこの部分だけを見ても問題は解けず,ヒントはもう少し下の方に書かれています.選択肢も並行して見ながら考えると,どうやらfoundという,希望座席数を満たしたかどうかのフラグが関係しているようです.前述の内側のif文は希望の種別で空席数を満たしたということですので,「見つかった」と判断することができます.よって,答は「found = 1」となります.

空欄bは,希望種別で空席,という条件を満たさなかったときのelseですので,点検状態がリセットされます.題意より,隣り合う連続した席を確保するということですので,この時点で席が見つからなかったのと同様に状態となります.つまり,見つかった席数を0にすればよいのです.よって,答は「cnt = 0」となります.

空欄cおよびdは,if文の内側にあり,この条件は「found != 0」,つまり,座席が見つかっている状態を指します.まず空欄cですが,構造体POSITION型の変数posのメンバに代入する値を考えます.メンバ名はseat_rowですので,座席の列名を指します.列名を表す文字は,文字型配列row_s[]に格納されており,単純にその前から順に変数rowが持つ値を指定するだけです.ですので答は,「row_s[row]」になります.空欄dは少しややこしく,番号付けの規則について注意しなくてはなりません.同じく構造体変数posのメンバseat_noにより,座席番号を指定します.座席番号を表す変数noと希望座席数numを用いた式から計算するのですが,プログラム中の変数であるnoは0から数えているにもかかわらず,問題文中には座席番号は1から数えると書いてあります.ちょっとややこしいので,例を出して考えてみることにしましょう.

たとえば,プログラム中で0,1,2,3と並んだ席のうち,希望の2席が2~3番で予約可能とします.見つかったという状況においては,希望の2席は変数numに2という値が,変数noは終了席を表す3という値が格納されています.求めたいのは,劇場における(プログラム中の番号ではない)希望座席の最初の席番号で,この場合の答は3番(プログラム中では2)になってほしいわけです.普通に,「no – num」を計算すると,プログラム中での最初の席の1つ前の席番号(この場合,1)となります.よって,プログラム中での最初の席番号(この場合,2)は「no – num + 1」で表されます.さらに,劇場での席番号(この場合,3)はプログラム中でのものより数字が1つ大きくなりますので,「( no – num + 1 ) + 1 」で求めることができます.つまり,答は「no – num + 2」となります.ややこしいことに,選択肢中に「no – num + 1」というのもありますので,間違ってこちらを選んでしまうひっかけ問題となっています.どちらの「+1」を忘れても,間違った答えにたどり着いてしまいますので,最後まで慎重な確認が必要でしょう.問題作成側の意図としては「したやったり」なのですがね.

暑い日に考えると脳がオーバーヒートしますね.冷たいもので頭を冷やして,続きはまた次回に.

 

2011年(平成23年度)特別の解説

Date:

Tagタグ

Teamライターチーム紹介

神戸電子オフィシャルSNS

オープンキャンパスなどの
誰でも参加OKの楽しいイベント
やブログの最新記事などお届けします!

ページの上へ移動