基本情報アルゴリズムについて質問です。R7過去問 問12なぜ、イが正解ですか?

1件の回答

回答を書く

1249100

2026-01-23 13:30

+ フォロー

そこの解説にある通りっちゃぁ通りなんだけど,整数型変数のcounter,i,j,k が何を表してるか理解することですね。やろうとしてることの中に出てくる数が,どの変数に対応するかを考えること。

また,プログラムを書く上でどの変数は共通に出来て,どの変数は別途作らなければならないか,と言うことも見て覚えましょう。



例として,

10文字あるSourceText(\u0026quot;aabcabcdef\u0026quot; とする)の中から,3文字のPattern(\u0026quot;abc\u0026quot; とする)を探し出すことを考えましょう。



手順1 SourceText の1文字目と,Pattern の1文字目を比べます。

→ 同じです。同じなので,



手順2 SourceText の2文字目と,Pattern の2文字目を比べます。

→ 違います。違うので,



手順3 SourceText の2文字目と,Pattern の1文字目を比べます。

(ここで,2で違ったとしても,3文字目に進んではいけないことに注意)

→ 同じです。同じなので,2と同じことをします。



手順4 SourceText の3文字目と,Pattern の2文字目を比べます。

→ 同じです。同じなので,また文字を進めます。



手順5 SourceText の4文字目と,Pattern の3文字目を比べます。

→ 同じです。Pattern は3文字なので,これで1個見つかりました。見つかった個数を1増やします。



手順6 SourceText の3文字目と,Pattern の1文字目を比べます。

→ 違います。違うので,



手順7 SourceText の4文字目と,Pattern の1文字目を比べます。

→ 違います。違うので,



手順8 SourseText の5文字目と,Pattern の1文字目を比べます。

(上記,3,4,5と同じ操作で,もう1個見つかります



手順9 SourceText の6文字目と,Pattern の1文字目を比べます。

→ 違います。違うので,



手順10 SourceText の7文字目と,Pattern の1文字目を比べます。

→ 違います。違うので,



手順11 SourceText の8文字目と,Pattern の1文字目を比べます。

→ 違います。違うので,



手順12 SourceText の9文字目に行こうと思うけど,あと2文字しかないから絶対あるわけないです。 → 終わり





こうやっていくことになりますが,すぐわかるのは,「SourceText の何文字目か」と言う変数と,「Pattern の何文字目か」と言う変数が必要です。

そしてSurceText の何文字目は戻ることがあります。手順5~手順6では1つ戻りました。手順2~手順3では進みませんでした。他は1ずつ増えています。



だから,「SourceText のここから3個分」の「ここ」を表す変数と,「その3個の中の何文字目」を表す変数が必要だと言うことになります。



「SourceText のここから3個分」の「ここ」を表す変数を「 i 」

i+「その3個の中の何文字目」を「 j 」

「Pattern の何文字目か」を「 k 」 とします。



10行~16行のwhile では,j が増えますがi は増えません。上記の手順2はそのwhile の中の操作なので,手順3に進むときは手順1のときの i (=1)に1足した数になるので,i=2 になっています。

上記手順3~5も同様にj が増えてi はすのままですから,手順6でのi は手順3でのi に1加えたものになります。



だから,bの選択肢は

SouceText の何文字目かを表す「 j 」 …これが「 i 」だと10行~16行のwhile の中で変化しないのでダメです。





aの選択肢は,上記手順12を表しています。

i,j,k の取る変数は,薄々気づいていると思いますが,0,1,2,…です。文字列の最初の文字は「0文字目」,2番目の文字は「1文字目」となっています。

こうしておくことで,\u0026quot;aabcabcdef\u0026quot; の\u0026quot;d\u0026quot;=「7文字目」(8番目)にPatlen の3を足しても10だから,まだ行ける。

\u0026quot;aabcabcdef\u0026quot; の\u0026quot;e\u0026quot;=「8文字目」(9番目)にPatlen の3を足すと11だから,もう無理。 とわかります。



だから,i+Patlen とTextlen を比較し,イコールでももう一度回すように「以下」を使えば良いことになります。





文字で説明するのは厳しいですね。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有