HOME»基本情報技術者試験掲示板»令和5年度公開問題科目B第3問もついて
投稿する

令和5年度公開問題科目B第3問もついて [5732]

 でんのすけさん(No.1) 
問題集の説明に納得がいかなかったので、質問させてください。
令和5年度公開問題科目B第3問にあるクイックソートの問題についてです。
問題文に関してはネットに落ちているので省きます。
sort(1,5)を呼び出し、pivotの数字までiやjが増えたり減ったりすると思うのですが、不等号<や>と書いてあるなら、以下や以上(7以上なら7も含む)ではなく、〇〇より大きいや小さい(7より大きいなら7は含まない)が普通ですよね?
繰り返し処理がi=3,j=3で終わっているのに対してpivot=3なのでおかしいのかな?と思っています。
説明を見ても納得できていません。
どなたかお優しい方、是非ご回答いただけると幸いです。
よろしくお願いします。
2024.12.21 20:46
どんちゃんさん(No.2) 
ちなみにトレースはしましたか?
2024.12.21 21:29
 でんのすけさん(No.3) 
返信ありがとうございます。
トレースをして、data[2,1,3,5,4]と見比べてiとjの数字を求めました。
私の回答としては、i=4,j=2ではないかと思っていました。(参考問題集にはi=3,j=3と記載していた)
問題としては、プログラム22行目(αの1行下)で入れ替えを行っていて、答えを求める/**α**/ではまだ入れ替えは行われないのでdataの数字はそのままというのは理解できています。
2024.12.21 21:55
jjon-comさん(No.4) 
FE ゴールドマイスター
基本情報 令和5年 科目B 問3
https://www.fe-siken.com/kakomon/05_haru/b3.html

この問題では、要素番号 3 の 要素(の内容)が 3 なので両者を混同する恐れがあります。説明のしやすさのために配列の要素を次のように変更することにします。
data ← {22, 11, 33, 55, 44}

sort(1, 5) という呼び出しは、要素番号1~5の範囲を昇順に整列するという指示になります。

i ← first の実行によって i=1 になり、
j ← last  の実行によって j=5 になり、
pivot ← data[(first+last)÷2の商] の実行によって pivot=33 になります。

while (data[i] < pivot)
  i←i+1
endwhile
によって 33 以上の値が見つかるまで i は後方に動き、i=3 でループを終えます。

while (pivot < data[j])
  j←jー1
endwhile
によって 33 以下の値が見つかるまで j は前方に動き、i=3 でループを終えます。

処理は次に流れて、
if (i ≧ j)
  繰り返し処理を終了する
endif
において 3=3 ですから、while(true)~endwhile のループは終了です。
2024.12.22 00:10
電タックさん(No.5) 
FE ブロンズマイスター
>i=4,j=2ではないかと思っていました。(参考問題集にはi=3,j=3と記載していた)

iの値だけにフォーカスしてみます。

i ← first // (初期値=1)

while(data[i] < pivot) // while(2 < 3) 真偽=真
i ← i + 1 // (結果2=1 + 1)
endwhile
while(data[i] < pivot) // while(1 < 3) 真偽=真
i ← i + 1 // (結果3=2 + 1)
endwhile
while(data[i] < pivot) // while(3 < 3) 真偽=偽
// ループなし
endwhile

この後jの値によりwhile(true)の繰り返しを途中で抜けます。
>答えを求める/**α**/ではまだ入れ替えは行われないのでdataの数字はそのままというのは理解できています。 
とあるので、ループ最後の加算が行われていないのはご理解されているようなので、上記の2回以外で、iに3回目の加算をしてしまっている箇所があるのかもしれません。
2024.12.22 09:43
星川さん(No.6) 
何度トレースしてもi=3にしかならないんですが主さんはトレースのどこでiを3以上にしてるんですか?
トレース過程書いてもらえれば間違いに気づけるんでは?
私も電タックさんと同じ回答になってます。
2024.12.22 16:37
 でんのすけさん(No.7) 
3名のご回答ありがとうございます。
トレース自体は全く一緒の方法で進められていました。
最初の質問内容として整理すると、8行・11行目の不等号は<や>の記載で、14行目の不等号≧の=付きで記載しています。前者の場合、比べる数字が同じでもwhile文が抜けているのが何故?という部分でした。
同じ回答を頂いている限り、プログラムでは<や>でも数字を含めることがあるという発見がありました。
ありがとうございました。
2024.12.23 20:17
返信投稿用フォーム
お名前
顔アイコン

本文(コミュニティガイドライン⇱を順守して適切な投稿を心がけましょう)
🔐投稿削除用のパスワード
投稿プレビュー
※CBT試験では出題内容の公開が禁止されているため、直接的・間接的を問わず、出題内容や難易度を尋ねる質問は厳禁です。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む文章の投稿はできません。
投稿記事削除用フォーム
投稿No. パスワード 
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop