HOME»基本情報技術者試験掲示板»サンプル問題[科目B]問6について
投稿する
サンプル問題[科目B]問6について [4908]
ドットコムさん(No.1)
答え自体は導き出せたのですが、少し時間がかかってしまいます。
何か解くうえでのコツとかがあるのでしょうか??
それとも多少時間のかかるものも普通にあるということなのでしょうか。
この問題の自分の解き方としては、これは最終的にはこうなるなと感じるまでトレースをしていって導き出した感じですが、ほかに効率のいい解き方などがあるのでしょうか。
https://www.fe-siken.com/kakomon/sample/b6.html
何か解くうえでのコツとかがあるのでしょうか??
それとも多少時間のかかるものも普通にあるということなのでしょうか。
この問題の自分の解き方としては、これは最終的にはこうなるなと感じるまでトレースをしていって導き出した感じですが、ほかに効率のいい解き方などがあるのでしょうか。
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」で。
ビットの並びが逆になることを確かめればいいので、
「1100」などの4ビットで解いています。
「r << 7」の部分はビット数マイナス1の「r << 3」で。
2023.06.23 15:12
ドットコムさん(No.4)
返信ありがとうございます。
その方法は思いつきませんでした。確かにそれで解いたほうが明らかに楽ですね。
やっぱりコツコツトレースしていった方が確実ですかね。
その方法は思いつきませんでした。確かにそれで解いたほうが明らかに楽ですね。
やっぱりコツコツトレースしていった方が確実ですかね。
2023.06.23 15:54
jjon-comさん(No.5)
★FE ゴールドマイスター
ビットの並びを逆にする,情報処理技術者試験で定番のアルゴリズムは次のとおり。
元データの右端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 ⋀ 00000001)
元データの右方向1ビットシフト
rbyte←rbyte >> 1
結果データの左方向1ビットシフト
r←(r << 1)
という要素が揃っているので【ア】が正解だろうと即座に予想するでしょう。
もちろん予想が間違っている可能性もあるので,
試験時間が余っていたら最後に再検討するでしょうけれど,
データの変化の様子をイメージできるようになると
一行一行のトレース作業に頼る割合は減ってくるように思います。
元データの右端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 ⋀ 00000001)
元データの右方向1ビットシフト
rbyte←rbyte >> 1
結果データの左方向1ビットシフト
r←(r << 1)
という要素が揃っているので【ア】が正解だろうと即座に予想するでしょう。
もちろん予想が間違っている可能性もあるので,
試験時間が余っていたら最後に再検討するでしょうけれど,
データの変化の様子をイメージできるようになると
一行一行のトレース作業に頼る割合は減ってくるように思います。
2023.06.23 16:53
jjon-comさん(No.6)
★FE ゴールドマイスター
試験対策本を書いている著者の方々が,
【旧】基本情報技術者試験 午後の問題 アセンブラ(CASL 2)
で出題されていたビット処理のパターンを擬似言語に置き換えたものを
著書の中で解説するようになり,それが広く知られるようになれば,
ビット処理アルゴリズムについては解答時間の短縮が期待できるでしょう。
【旧】基本情報技術者試験 午後の問題 アセンブラ(CASL 2)
で出題されていたビット処理のパターンを擬似言語に置き換えたものを
著書の中で解説するようになり,それが広く知られるようになれば,
ビット処理アルゴリズムについては解答時間の短縮が期待できるでしょう。
2023.06.23 17:25
ドットコムさん(No.7)
返信遅くなりすみません。
詳しい解説ありがとうございます!
勉強になりますm(_ _"m)
詳しい解説ありがとうございます!
勉強になりますm(_ _"m)
2023.06.27 10:33