平成30年秋期 午後問13
pinさん
(No.1)
問題eの条件「min_time > end_time[i]」がどうしてmin_timeがend_time[i]より大きい場合に処理が走るのか理解ができませんでした。
最小の前者終了時刻を更新するので演算子は「<」になるような気がしてなりません。
ご教示いただけますと幸いです。
よろしくお願いします。
最小の前者終了時刻を更新するので演算子は「<」になるような気がしてなりません。
ご教示いただけますと幸いです。
よろしくお願いします。
2022.10.23 17:10
nsさん
★FE シルバーマイスター
(No.2)
プログラムに行番号が付いておらず説明しにくいですが、「i:2, i≦B1, 1」のループの部分は〔マクロ:queue_simulation の説明〕の(3)の①の部分と対応しています。
端的に書けば、
min_time・・・それまでに見つけた時刻のうち、最小(時刻が早い)の値
end_time[i]・・・いまチェックしている値
ですから、end_time配列の中から最小の値を見つけるには「min_time > endtime[i]のときに、min_timeの値を更新する」という動作が必要になります。
その疑問が出ているということはトレースができていない(そもそもやってない?)のではないかと思います。
end_time配列の要素数が3つ(=窓口数が3つ)の例で説明します。
※各要素は「午前0時00分からの経過分数」として整数が格納されているはずですが、分かりやすさのために時刻形式で書きます。
| 1 | 2 | 3 |
|10:35|10:42|10:30|
(3)①の説明から、end_timeが上のような状態のとき、ループ終了時点でmin_timeが10:30になっていてほしいことが分かります。
まずループに入る前にmin_no=1, min_time=10:35にセットされます。
■ループ1周目(i=2)
min_time=10:35, end_time[i]=10:42です。
空欄eが「min_time > end_time[i](正答)」であれば、条件を満たさないため、処理は行われません。
空欄eが「min_time < end_time[i](質問者さんの主張)」であれば、条件を満たすため、min_time=10:42, min_no=2に更新されます。
■ループ2周目(i=3)
end_time[i]=10:30,
(正答)であれば、min_time=10:35, end_time[i]=10:30で、「min_time > end_time[i]」を満たすため、min_time=10:30, min_no=3に更新されます。
(質問者さんの主張)であれば、min_time=10:42, end_time[i]=10:30で、「min_time < end_time[i]」を満たさないため、処理は行われません。
□ループ3周目(i=4)
ループの継続条件を満たさないので、ループを終了します。
ループを抜けた時点のmin_timeの値ですが、
(正答)10:30
(質問者さんの主張)10:42
となりました。
端的に書けば、
min_time・・・それまでに見つけた時刻のうち、最小(時刻が早い)の値
end_time[i]・・・いまチェックしている値
ですから、end_time配列の中から最小の値を見つけるには「min_time > endtime[i]のときに、min_timeの値を更新する」という動作が必要になります。
その疑問が出ているということはトレースができていない(そもそもやってない?)のではないかと思います。
end_time配列の要素数が3つ(=窓口数が3つ)の例で説明します。
※各要素は「午前0時00分からの経過分数」として整数が格納されているはずですが、分かりやすさのために時刻形式で書きます。
| 1 | 2 | 3 |
|10:35|10:42|10:30|
(3)①の説明から、end_timeが上のような状態のとき、ループ終了時点でmin_timeが10:30になっていてほしいことが分かります。
まずループに入る前にmin_no=1, min_time=10:35にセットされます。
■ループ1周目(i=2)
min_time=10:35, end_time[i]=10:42です。
空欄eが「min_time > end_time[i](正答)」であれば、条件を満たさないため、処理は行われません。
空欄eが「min_time < end_time[i](質問者さんの主張)」であれば、条件を満たすため、min_time=10:42, min_no=2に更新されます。
■ループ2周目(i=3)
end_time[i]=10:30,
(正答)であれば、min_time=10:35, end_time[i]=10:30で、「min_time > end_time[i]」を満たすため、min_time=10:30, min_no=3に更新されます。
(質問者さんの主張)であれば、min_time=10:42, end_time[i]=10:30で、「min_time < end_time[i]」を満たさないため、処理は行われません。
□ループ3周目(i=4)
ループの継続条件を満たさないので、ループを終了します。
ループを抜けた時点のmin_timeの値ですが、
(正答)10:30
(質問者さんの主張)10:42
となりました。
2022.10.23 18:34
pinさん
(No.3)
nsさん
分かり易いご説明をいただきありがとうございます。
ご指摘どおりトレースができていませんでした。
分かり易いご説明をいただきありがとうございます。
ご指摘どおりトレースができていませんでした。
2022.10.23 21:39
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告