HOME»基本情報技術者試験掲示板»H26春 問題8
投稿する
H26春 問題8 [1885]
エヌマエリッシュさん(No.1)
なぜループでは変数k nを使うのに変数mが入るアが答えになるのでしょうか?誰か説明願います。
2019.08.10 10:47
てきとーさん(No.2)
変数kは配列の添字です。
この添字が、各配列のどこを表しているかがこの問題のポイントです。
具体例で考えるとわかりやすいです。
これは文字をつなげる処理なので、文字で考えてみます。
長さmの文字列:たらこ(3文字なのでm=3)
長さnの文字列:マヨネーズ(5文字なのでn=5)
配列X
要素:「た」「ら」「こ」
添字:「1」「2」「3」 ←変数k
配列Y
要素:「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」 ←これも変数k
配列Xの後ろに配列Yを連結して配列Zにするとありますから、処理後はこうなります。
配列Z
要素:「た」「ら」「こ」「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」「6」「7」「8」 ←この添字をどうやって表現するか、です
処理を進めながら、「出力=空っぽの配列Zに先頭から一つずつ要素を入れる」とイメージしてみてください。
実際の処理の流れを文字で表すと
ループ1開始
配列Xの1番目「た」を 配列Zの1番目に入れる k=1
配列Xの2番目「ら」を 配列Zの2番目に入れる k=2
配列Xの3番目「こ」を 配列Zの3番目に入れる k=3
ループ1終了
ループ2開始
配列Yの1番目「マ」を 配列Zの4番目(3+1)に入れる k=1←ココに注目
配列Yの2番目「ヨ」を 配列Zの5番目(3+2)に入れる k=2
配列Yの2番目「ネ」を 配列Zの6番目(3+3)に入れる k=3
...
と続きます。
ループ1が終わった時点で配列Zは配列Xの文字列の長さ(m=3)まで埋まりました。
ここから配列Zに要素を追加するので添字は4番目からになります。
そこで配列Yの添字(k)に配列Xの文字列の長さ(m)を足してずらしています。
これがZ(m+k)の意味です。
選択肢アを当てはめるとこうなります。
X(1) → Z(1)
X(2) → Z(2)
X(3) → Z(3)
Y(1) → Z(3+1)
Y(2) → Z(3+2)
Y(3) → Z(3+3)
…
随分長くなってしまって…すみません。
この添字が、各配列のどこを表しているかがこの問題のポイントです。
具体例で考えるとわかりやすいです。
これは文字をつなげる処理なので、文字で考えてみます。
長さmの文字列:たらこ(3文字なのでm=3)
長さnの文字列:マヨネーズ(5文字なのでn=5)
配列X
要素:「た」「ら」「こ」
添字:「1」「2」「3」 ←変数k
配列Y
要素:「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」 ←これも変数k
配列Xの後ろに配列Yを連結して配列Zにするとありますから、処理後はこうなります。
配列Z
要素:「た」「ら」「こ」「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」「6」「7」「8」 ←この添字をどうやって表現するか、です
処理を進めながら、「出力=空っぽの配列Zに先頭から一つずつ要素を入れる」とイメージしてみてください。
実際の処理の流れを文字で表すと
ループ1開始
配列Xの1番目「た」を 配列Zの1番目に入れる k=1
配列Xの2番目「ら」を 配列Zの2番目に入れる k=2
配列Xの3番目「こ」を 配列Zの3番目に入れる k=3
ループ1終了
ループ2開始
配列Yの1番目「マ」を 配列Zの4番目(3+1)に入れる k=1←ココに注目
配列Yの2番目「ヨ」を 配列Zの5番目(3+2)に入れる k=2
配列Yの2番目「ネ」を 配列Zの6番目(3+3)に入れる k=3
...
と続きます。
ループ1が終わった時点で配列Zは配列Xの文字列の長さ(m=3)まで埋まりました。
ここから配列Zに要素を追加するので添字は4番目からになります。
そこで配列Yの添字(k)に配列Xの文字列の長さ(m)を足してずらしています。
これがZ(m+k)の意味です。
選択肢アを当てはめるとこうなります。
X(1) → Z(1)
X(2) → Z(2)
X(3) → Z(3)
Y(1) → Z(3+1)
Y(2) → Z(3+2)
Y(3) → Z(3+3)
…
随分長くなってしまって…すみません。
2019.08.10 11:37
エヌマエリッシュさん(No.3)
ありがとうございます。おかげで理解することができました。
2019.08.10 13:00