平成27年春期午後問3

田中さん  
(No.1)
https://www.ap-siken.com/kakomon/27_haru/pm03.html
応用情報技術者過去問題 平成27年春期 午後問3 設問3(k)   についての質問です。

こちらの答えですが、解答に”OutputStringの長さがBlockSortStringの長さより小さい”とありますが、これは”Lineとnが異なる”と同じ意味になりますか。
最後の文字、今回だとpapayaの'a'のDecodeArray[2][n]にはいっている添え字は、1文字目の'p'を表す変数Lineになると考えたのですが、この解答は間違いでしょうか。

間違いがあればご指摘をお願いいたします。
2023.10.06 23:58
ykさん 
(No.2)
極端な例ですが、'aaaaaa'のように全て同じ文字の文字列を考えます。

変換した結果は「'aaaaaa', 1」、復元処理の手順2まで行った結果は「a(1), a(2), a(3), a(4), a(5), a(6)」です。
この場合、a(1)を取り出して並べる操作が無限に繰り返されますが、whileの条件が「Lineとnが異なる」だと最初から条件を満たさないので結果はwhileに入る前に取り出した1文字になってしまいます。

添字は1から文字列の長さまでの連番(順列)になっていますが、手順3でこれらが必ず1回ずつ選ばれるとは限らないので、入力例によってはこのケースのように文字数が足りなかったり無限ループになってしまう事が考えられます。(添字が必ず1回ずつ選ばれるなら「Lineとnが異なる」でも成立すると思います)

本番中にアルゴリズムの内部動作を完全に理解したりコーナーケースを見つけるのは難しいと思うので、条件を考える場合は定数などの明らかな値を使って考えると良いと思います。今回の問題だとそれは「文字列の長さ」になります。
2023.10.07 07:40
boyonboyonさん 
AP シルバーマイスター
(No.3)
他のスレッドでも書いたことがありますが、プログラミングの問題は、処理の説明をしている文章をプログラム言語に翻訳すると考えると分かりやすいです。
この問題では、表1の手順3の末尾に書いてある
>並べた要素の個数が変換結果の文字列の長さと同じになるまで、要素を取り出して並べることを繰り返す。
が、while文に対応します。なので、whileの条件としては、
「並べた要素の個数が変換結果の文字列の長さと同じになるまで」
を翻訳するのが適当かと思います。

並べた要素の個数(OutputString)
変換結果の文字列の長さ(BlockSortString)
同じになるまで→小さい間
みたいな感じです。
2023.10.07 12:56
田中さん  
(No.4)
お二方、お返事を頂きありがとうございます。

仰る通り、私の解答には当てはまらないケースも存在していますね。
考えが足りていませんでした。
試験当日になりましたが、もやもやが晴れてよかったです。
合格を目指して全力を尽くしてきます。
ありがとうございました。
2023.10.08 01:21

返信投稿用フォーム

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

その他のスレッド


Pagetop