平成29年秋期午後問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
後藤さん  
(No.1)
解説を読んでもわからないので、教えてください。
設問1のaについてです。

解説には
>後ろから1文字目(奇数番目)には②の処理を適用しなくてはならないため・・・
とありますが、問題文の②には
>偶数番目の文字に割り当てた数値は,そのまま全て足し合わせる。
とあります。後ろから一番目(1)は奇数ではないですか?
最初の文字には偶数の処理をするという記述はおかしくないでしょうか。
私がなにか読み違えているのでしょうか。
お知恵をお貸しください。

ちなみにプログラムの処理内容については理解しております。
よろしくお願いいたします。
https://www.fe-siken.com/kakomon/29_aki/pm08.html
2022.11.17 12:50
BIBIさん 
(No.2)
この投稿は投稿者により削除されました。(2022.11.17 13:45)
2022.11.17 13:45
後藤さん  
(No.3)
BIBIさんありがとうございます。

すみませんが余計にわからなくなりました。
分岐の箇所にNは関係ありますか?

開始時にis_even=falseで、最初(一番目)の文字は奇数の処理(①)をしなければならないと解釈したのですが、
どこかにN=30=偶数、最初は偶数処理をするという記述がどこかにありますか?

重ね重ね申し訳ありませんが、ご教授いただけると幸いです。
2022.11.17 13:22
BIBIさん 
(No.4)
変数Nについては関係なかったです、すみません。

プログラムと文章より

真の場合、②偶数番目の文字に割り当てた数値は,そのまま全て足し合わせる処理が行われています。

偽の場合、①文字列の末尾の文字を1番目の文字とし,文字列の先頭に向かって奇数番目の文字に割り当てた数値を2倍してNで割り,商と余りの和を求め,全て足し合わせる処理が行わています。

is_even←falseが代入されています。

末尾は1文字目=奇数なので、偽の処理を行わなければなりません。

そのため条件式は
is_even = false  であると真となり①の処理をしてしまいます。

なので
is_even = true  を設定し、偽である②の処理をおこなうようにします。

これであってるかと思います。
煩わせてしまい、申し訳ないです。
2022.11.17 13:45
後藤さん  
(No.5)
BIBIさん

お忙しいところご丁寧にありがとうございます。
ご説明いただいた部分は納得しているんです。

解説に、
>後ろから1文字目(奇数番目)には②の処理を適用しなくてはならないため・・・
とあります。
is_evenの初期値がfalse、空欄がis_even=true、
つまり最初の文字は分岐で偽の処理(奇数の処理)を行わなければならないのに
②の偶数番目の処理を行うとの記述はおかしくないのかな、と思いました。

どこかに読み落としがありましたら、お教えいただくと幸いです。
よろしくお願いいたします。
2022.11.17 15:15
jjon-comさん 
FE ゴールドマイスター
(No.6)
この投稿は投稿者により削除されました。(2022.11.17 16:27)
2022.11.17 16:27
そいらてさん 
(No.7)
横から通りすがりに失礼します。

おそらく、解説中の
>後ろから1文字目(奇数番目)には②の処理を適用しなくてはならないため・・・
が指している② は、問題文中の② ではなく、解説内の少し上の行にある
>sum ← sum + (value × 2) ÷ N + (value × 2) % N …②
の② だと思われます。

問題文と解説内で、同じ記号を使ってちょうど反対の処理を指しているので、ちょっと紛らわしいですね…。
内容的には、後藤さんの理解されている通りで合っていると思いますよ!
2022.11.17 16:30
後藤さん  
(No.8)
そいらてさん

ありがとうございます!すっきり解決いたしました。
なるほど、そちらにも②があったんですね。小さくて見落としていました。

問題文と解説で同じ記号を用いて違う説明をするときは、気を付けて読まないといけないですね。
皆様ありがとうございました。
2022.11.17 16:48

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop