HOME»基本情報技術者試験掲示板»平成23年特別午後問8
投稿する
Next関数のループ処理の内部のIF文以降の処理の概要ですが、
配列Sの中で最初に1になる箇所をまず洗い出します。(IF S[L] = 1)
その後は1が連続している場合、1が連続している数を変数Cに加算していきます。(IF S[L] = 1 AND S[L+1] = 1)
1の次に0になる場合にS[L]とS[L+1]の1と0を入れ替えてInitを再び呼び出します。(IF S[L] = 1 AND S[L+1] = 0)
配列Sが01101の場合の例だと
変数L=2の場合に、S[L] = 1 AND S[L+1] = 1となり、変数Cが1加算され
変数L=3場合に、S[L] = 1 AND S[L+1] = 0となり、
S[L]とS[L+1]の1と0を入れ替えて01011にした後
Init(S,2,1)を呼び出す事になります。(Init後は10011となる)
この時は3,4番目の要素を入れ替え、
N=2としてInit関数を呼び出している為
cは「エ:より前」になるかと思います。
ポイントとしては、
配列S内の1と0の数については、1が3個で、0が2個というのが
変わらないという部分になるかと思います。
Nの範囲eは
配列Sが10110の時、変数L=1の時にInit関数が呼び出されるので、最小値はL-1=0
配列Sが01110の時、変数L=4の時にInit関数が呼び出されるので、最大値はL-1=3
よって範囲は「イ:0 ~ 3」になるかと思います。
Kの範囲fは
配列Sが10110の時、変数L=1の時にInit関数が呼び出され、その時の変数Cは0の為、最小値は0
配列Sが01110の時、変数L=4の時にInit関数が呼び出され、その時の変数Cは2の為、最大値は2
よって範囲は「ア:0 ~ 2」になるかと思います。
平成23年特別午後問8 [2736]
文系脳さん(No.1)
★FE ブロンズマイスター
https://www.fe-siken.com/kakomon/23_toku/pm08.html
c、e、fの解説をお願いします。それ以外は理解できた(つもり)のですが、この3つだけよくわかりません。
c、e、fの解説をお願いします。それ以外は理解できた(つもり)のですが、この3つだけよくわかりません。
2021.01.27 21:57
関数従属さん(No.2)
★FE ゴールドマイスター
>cについて
Next関数のループ処理の内部のIF文以降の処理の概要ですが、
配列Sの中で最初に1になる箇所をまず洗い出します。(IF S[L] = 1)
その後は1が連続している場合、1が連続している数を変数Cに加算していきます。(IF S[L] = 1 AND S[L+1] = 1)
1の次に0になる場合にS[L]とS[L+1]の1と0を入れ替えてInitを再び呼び出します。(IF S[L] = 1 AND S[L+1] = 0)
配列Sが01101の場合の例だと
変数L=2の場合に、S[L] = 1 AND S[L+1] = 1となり、変数Cが1加算され
変数L=3場合に、S[L] = 1 AND S[L+1] = 0となり、
S[L]とS[L+1]の1と0を入れ替えて01011にした後
Init(S,2,1)を呼び出す事になります。(Init後は10011となる)
この時は3,4番目の要素を入れ替え、
N=2としてInit関数を呼び出している為
cは「エ:より前」になるかと思います。
>e,fについて
ポイントとしては、
配列S内の1と0の数については、1が3個で、0が2個というのが
変わらないという部分になるかと思います。
Nの範囲eは
配列Sが10110の時、変数L=1の時にInit関数が呼び出されるので、最小値はL-1=0
配列Sが01110の時、変数L=4の時にInit関数が呼び出されるので、最大値はL-1=3
よって範囲は「イ:0 ~ 3」になるかと思います。
Kの範囲fは
配列Sが10110の時、変数L=1の時にInit関数が呼び出され、その時の変数Cは0の為、最小値は0
配列Sが01110の時、変数L=4の時にInit関数が呼び出され、その時の変数Cは2の為、最大値は2
よって範囲は「ア:0 ~ 2」になるかと思います。
2021.01.27 23:42
文系脳さん(No.3)
★FE ブロンズマイスター
解説ありがとうございます。
2021.01.28 13:09