サンプル問題[科目B]問6について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ドットコムさん  
(No.1)
答え自体は導き出せたのですが、少し時間がかかってしまいます。
何か解くうえでのコツとかがあるのでしょうか??
それとも多少時間のかかるものも普通にあるということなのでしょうか。
この問題の自分の解き方としては、これは最終的にはこうなるなと感じるまでトレースをしていって導き出した感じですが、ほかに効率のいい解き方などがあるのでしょうか。
https://www.fe-siken.com/kakomon/sample/b6.html
2023.06.23 13:42
名無しさん 
(No.2)
この投稿は投稿者により削除されました。(2023.06.23 15:12)
2023.06.23 15:12
名無しさん 
(No.3)
私もコツコツトレース派ですが、
ビットの並びが逆になることを確かめればいいので、
「1100」などの4ビットで解いています。
「r << 7」の部分はビット数マイナス1の「r << 3」で。
2023.06.23 15:12
ドットコムさん  
(No.4)
返信ありがとうございます。
その方法は思いつきませんでした。確かにそれで解いたほうが明らかに楽ですね。

やっぱりコツコツトレースしていった方が確実ですかね。
2023.06.23 15:54
jjon-comさん 
FE ゴールドマイスター
(No.5)
ビットの並びを逆にする,情報処理技術者試験で定番のアルゴリズムは次のとおり。

元データの右端1ビットに着目するアルゴリズムの例。
右方向1ビットシフトを繰り返して,右端1ビットを抽出し,結果データに併合する。
結果データの左方向1ビットシフトを繰り返せば,ビットの並びは逆になる。

 0100101[1] の右端1ビットを抽出して格納 0000000[1]
0 010010[1] の右端1ビットを抽出して格納 0000001[1]
00 01001[0] の右端1ビットを抽出して格納 0000011[0]
000 0100[1] の右端1ビットを抽出して格納 0000110[1]
0000 010[0] の右端1ビットを抽出して格納 0001101[0]
00000 01[0] の右端1ビットを抽出して格納 0011010[0]
000000 0[1] の右端1ビットを抽出して格納 0110100[1]
0000000 [0] の右端1ビットを抽出して格納 1101001[0]

--------
アルゴリズムの問題に慣れている者であれば,

元データの右端1ビットの抽出
(rbyte &#8896; 00000001)

元データの右方向1ビットシフト
rbyte←rbyte >> 1

結果データの左方向1ビットシフト
r←(r << 1)

という要素が揃っているので【ア】が正解だろうと即座に予想するでしょう。

もちろん予想が間違っている可能性もあるので,
試験時間が余っていたら最後に再検討するでしょうけれど,
データの変化の様子をイメージできるようになると
一行一行のトレース作業に頼る割合は減ってくるように思います。
2023.06.23 16:53
jjon-comさん 
FE ゴールドマイスター
(No.6)
試験対策本を書いている著者の方々が,

【旧】基本情報技術者試験 午後の問題 アセンブラ(CASL 2)
で出題されていたビット処理のパターンを擬似言語に置き換えたものを
著書の中で解説するようになり,それが広く知られるようになれば,

ビット処理アルゴリズムについては解答時間の短縮が期待できるでしょう。
2023.06.23 17:25
ドットコムさん  
(No.7)
返信遅くなりすみません。
詳しい解説ありがとうございます!
勉強になりますm(_ _"m)
2023.06.27 10:33

返信投稿用フォーム

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

その他のスレッド


Pagetop