HOME»基本情報技術者試験掲示板»令和7年 科目B公開サンプル問題4について
投稿する

令和7年 科目B公開サンプル問題4について [6026]

 もんぷちさん(No.1) 
i=1
j=1 //α
を処理するときに、

if(data[i+j-1]がk[j]と等しい)→data[1]がk[1]と等しい→trueになる

if(jがlenKeyと等しい)→j=1、lenKey=3→falseになる

else
 αの行から始まる繰り返し処理を終了する

上記の流れについて、
初見で「αの行から始まる繰り返し処理を終了する」というコメントを見て、
次の処理(i=1、j=2)の処理はしないと考えてしまい、「i=2、j=1」の処理に進んでしまいました。

このコメントの意味がよくわからなかったのですが、教えていただけますでしょうか。
2025.08.19 20:56
まーぼさん(No.2) 
FE シルバーマイスター
令和7年 科目B公開問題 問4
https://www.fe-siken.com/s/kakomon/07_haru/b4.html

αの行から始まる繰り返し処理を終了する
の上にあるelseは
if(data[i+j-1]がk[j]と等しい)
に対応するelseです。

ifとelseのインデントに注意してください。

>if(data[i+j-1]がk[j]と等しい)→data[1]がk[1]と等しい→trueになる

のですから、対応するelse句はないのと同じです。

if(true){
func1()
}else
{
func2()
}

単に
func1()
と書くのと変わらないです。
2025.08.19 21:33
 もんぷちさん(No.3) 
まーぼ様

早速のご返信ありがとうございます!
自分で「trueになる」と書いておきながら、直前のif文が「false」だったためそちらに意識が行ってしまっていました。
ご指摘いただきありがとうございました。

ちなみに、私はこの問題を「i=6」になるまで全部トレースしないと答えがわかりませんでした。
慣れてる方だったらどのくらいのタイミングで正解の「8回」に気付くのでしょうか?
2025.08.19 22:27
まーぼさん(No.4) 
FE シルバーマイスター
本サイトの解説にある通り、トレースした方が確実に答えが求められます。トレースする場合は、最後までトレースしないと分からないかと思います。

これは個人的な解き方なので、参考程度なのですが、私の場合はi = 1のループが終わった時点で、トレースは終了しますね。

個人的な解き方、というか思考のプロセス?としては、
ループ変数i,jは何の役割を果たすんだろう?ってのがまず考えることです。
とりあえず、iから考えると、iは1から(lenData- lenKey + 1)まで増加するとあります。
この(lenData- lenKey + 1)という数値はなにを表すんだろう?配列dataをすべて走査する場合は、基本1からlenDataまでのはず…となって、
問題の入力例で考えると、lenData=8,lenKey=3なので、(lenData- lenKey + 1)=6と分かります。
つまりi=7には到達しないということです。
ここから、iは配列dataの中での文字列の開始位置なのでは?と推測されます。
resultにはiが追加され、この関数の結果は、先頭の要素番号を全て格納した配列を返すので、この推測は正しそうだ、となります。

次にjを考えると、これは単純に、配列keyの長さまで増やしているようです。

まとめると、iは文字列の開始位置のため、jは配列keyを単純にループするための変数。

ここまで考えて、やっとトレースに入り、
i=1の場合は、j=2までは配列keyと一致しているからβ行の条件式が真になり、j=3で一致しなくなるからβ行の条件式が偽になる。
つまり、i=1のときは、2回。
ここでトレースは終了。
i=2のときは、最初から文字が一致しないので、0回。
i=3のときは、j=3まですべて一致するので、3回。
i=4のときは、最初から文字が一致しないので、0回。
i=5のときは、最初から文字が一致しないので、0回。
i=6のときは、j=3まですべて一致するので、3回。
すべてのiでの回数を足して、
2+3+3=8なので、8回。
…というような感じですね。
2025.08.19 23:51
 もんぷちさん(No.5) 
まーぼ様

ありがとうございます!
思考のプロセス、大変勉強になりました・・!
・・と、同時にそのレベルになるまでにあとどのくらかかるのか・・という不安に襲われました涙
もっとがんばります!!
2025.08.20 09:42
返信投稿用フォームスパム防止のためにスレッド作成日から40日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop