基本情報23年 特別 午後 問8
(注意:6月に行われた「特別試験」のものです。先日10月に行われた秋試験では”ありません”)
先々週、問7をやっているので、今回は問8
【問題を解く前に】
言語系の問題は、基本的には、プログラムを解析することなんだけど、
情報処理試験にだけ使えるテクニックとして
プログラムはただしいとして(=バグがないとして)考えると、
こうならないとおかしいはず!というふうに「推測する」
というのがあります。今回、それを使います
【解き方】
aについて
選択肢をみると、for文内で、
NEXTの前にDumpがあるかないかで分かれる
Initが成立したら、NextをやるまえにDumpしないと、Initの情報が消えるので、
前にあるのが正解。ここで、イはない。ウは、Rが-1で印刷しちゃいけないときも
印刷しようとするので、ウもない。
アかエか?
これは、始めのinitのRが-1の場合(印刷してはいけない場合)を考えるとわかる。
そのとき、印刷してはいけない。エは印刷してしまうので、これもない。
答えはア
bについて
37ページのNext(3つめの関数)の中、Lが1、L+1が0のとき、処理してる
ということは、1,0ときたとき。
あたまらかやっているので、見つかった最初でやっている
cについて
現在地がLで、L−1に対してやっているので、
「より前」に対してやっている
dについて
はじめの1,0(L=1)でひっかかり、このとき
S[l]=1
S[l+1]=0
つまり。1、0を0,1にするので、
0,1,101
eについて
まず、聞いているのはNextの関数の中の
Init(s,L−1,C)
において、L−1を聞いている。
nextのはじめでL=1といれているので、
最小値のとき、この式はfor文で成り立つから、INITを実行する。
ここで、L−1をもとめているので1−1=0で、最小値は0
最大値は、L<NでN=5だから、Lの最大値は4、
InitのところでL−1になるので、ここでの第二引数は4−1=3となる
だから、0から3
fについて
はじめに0をいれて、for文は成立するのだから、そのままInitにいく。
このときC=0,これが最小のはず(Cは足しているのでC=0より小さくなれない)
最大を考える。ここでCは、1を書く個数。
この問題が成立するには、全体で3以下。しかし、Initのまえ、s[l+1]で1こ1を使ってる
と書いてあるのでCは3−1=2こでいい
だから0から2
gについて
はじめのInitで11100になる。
終わりは、これと真逆になっているはず。なので00111
【答え】
a ア
b エ
c エ
d ア
e イ
f ア
g イ