アルゴリズム基礎解説(平成16年秋期問4)
解説 |
---|
まず、M進文字列→整数変換のアルゴリズムの基本的な考え方ですが、 例えば、2進数3桁 101を整数にするのであれば、 1×2^2+0×2^1+1×2^0 = 4+0+1 =5 したがい、 Σ(数字)×M^桁数 を計算するアルゴリズムとすればよいと考えられます。 空欄 a 空欄 a は、まさに上記の合計を計算する部分で、文字列の左側から1桁ずつ処理しており、前回ループで算出したValに対して基数を掛け、そこにToIntの返却値を足しています。したがって、Valに基数値Rdxを掛けた”ウ”が正解です。アルゴリズムをきちんと考えないと“イ Val”を選びかねないので注意。 同様に、整数値をN進文字列に直すアルゴリズムの基本部分を考えてみます。 例えば、19を3進数に変換するのであれば、 19÷3= 6 余り1 6は3進数の基数より大きいので 6÷3=2 余り0 → 201 が3進数に変換した結果となる。 これより、対象となる整数値を基数で割り、商の値が気数値より大きければ、再度割る、ということを繰り返せし、基数^0から計算すればよいと考えられます。これを踏まえてアルゴリズムを見ていくと、 空欄 b 引数として渡されたValをアルゴリズムの中で使っていないので、何かに置き換えていることが考えられる。ループの最初の行、Rem ← Que ÷Rdxが上記で考えたアルゴリズムの基本部分なので、ValはQueという変数に置き換えていることがわかる。 空欄c ループの中では、Remに商の余りを入れ、Tmpに変換結果を入れている。次の計算ループを考えると、Queに入っている値を基数で割った値にしなければならない。したがって、アが正解になる。 空欄d ループの中では商の余りを文字列に変換しているが、最後に残った商の値( 上述の例で言えば 6÷3=2 の2の部分)はループの中では何も考慮されていないので、この部分をループの後で入れてあげる必要がある。したがってここには ク Tmp ← ToStr(Quo) + Tmp が入る。 空欄e 最後にToIntの中ですが、 ToIntは内部にCodeという配列を持っており、この中に16進までの数字が初期値として入っています。この配列要素と引数を比較し、整数を返しているわけです。 空欄eが入っているループの中を見ると、Idxを1つずつ増やしています。解答群を見るとPとCode[Idx]を比較しているらしく、ここから、Pが引数として渡された文字で、それをCode[Idx]の要素と一致するまでループを回していると推察できます。 ループは前判定であるので、P=Code[Idx]となったときにループから抜ける条件を探すとイが適当な条件となります。このような問題は、値を実際に代入して確認を行いましょう。 |
cobalt様 ご投稿
メニューへ戻る