公開問題Bの自己流の解き方
![午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】](/img/banner/sp.png)
boyonboyonさん
★FE シルバーマイスター
(No.1)
公開問題を解いてみました。挑戦している方の一助になれば幸いです。
(注)ご自分で解いてからご覧になった方が、よろしいかと思います。
問1
□内の条件を満たすと最大値としてxを返すので、
まず、xが最大値になる条件を見つけます。
アエカは、最大かどうか確定しないので×
イウオは、xが最大値ですが、
ウオは、y,zの関係によって、xが出力されないことがあります。よって×
正解は、イ
問2
・トレースして求める
文字列として、"10"で考えます。(簡単なので)
求める整数値は、2 となります。
アのresult 1
イのresult 1
ウのresult 1
エのresult 2
正解は、エ
余談
アとイは、ちょっと付け加えて
result+int(binaryの(length-i+1)文字目の文字)x2^(i-1)
result+int(binaryのi文字目の文字)x2^(length-i)
にすればOKですが、エより計算に手間がかかります。
問3
(簡易解法)
「無向グラフの場合は、対称行列になる。」
と本文中に書いてあるので、行列のu行v列とv行u列は同じ値になります。
選択肢の中ではエが、u行v列とv行u列に同じ値1を代入しています。
よって答えは、エ
(問題文からどうやってプログラムを作っていくかを考える。)
目的は、「無向グラフの整数型配列の配列を正方行列で表現する。」です。
それを実現するためのプログラムを作るのですが、まず具体的なものを使って考えます。
具体例
{{1,3},{1,4},{3,4},{2,4},{4,5}}を
行列
00110
00010
10010
11101
00010
にする。
これを見て気がつくのは、
{1,3}がある、1行3列・3行1列が1になっている。
{1,4}がある、1行4列・4行1列が1になっている。
{3,4}がある、3行4列・4行3列が1になっている。
{2,4}がある、2行4列・4行2列が1になっている。
{4,5}がある、4行5列・5行4列が1になっている。
です。ここで最初に書いた目的を具体的に考えれば
配列要素に{i,j}があれば、i行j列・j行i列を1にすればよいことが分かります。
これをプログラムで実現したい。そこで考えた結果が問題に示されているプログラムです。
手順としては、
配列要素を一つ取り出す。
edgeList[i]={i1,i2}
edgeList[i][1]=i1
edgeList[i][2]=i2
行列のi1行i2列・i2行i1列に1を代入する。
adjMatrix[i1,i2]←1
adjMatrix[i2,i1]←1
になります。
上記のことをふまえると、
プログラム中のu,vは、edgeListから取り出したi1,i2を代入した変数になるので、
設問に当てはまる処理は
adjMatrix[u,v]←1
adjMatrix[v,u]←1
になります。
問4
while文が、3つあります。どのような場合にループに入るのかは、
1つ目:data1とdata2の両方に、調べる要素が残っている場合
どちらか片方を調べ終わったらループを抜けます。
2つ目:data1に調べる要素が残っていて、data2には調べる要素が残っていない場合
3つ目:data2に調べる要素が残っていて、data1には調べる要素が残っていない場合
になります。
merge({2,3},{1,4})に適用すると
1つ目のループを3回繰り返し
work={1,2,3,未},i=3,j=2になりループをぬけます。
この時点で、data1には調べる要素が残っていません。
2つ目のwhileループは通らず、3つ目のwhileに入るので、αを1回実行し、j=3になり
ループをぬけて終了。
答えは、イ
(注)ご自分で解いてからご覧になった方が、よろしいかと思います。
問1
□内の条件を満たすと最大値としてxを返すので、
まず、xが最大値になる条件を見つけます。
アエカは、最大かどうか確定しないので×
イウオは、xが最大値ですが、
ウオは、y,zの関係によって、xが出力されないことがあります。よって×
正解は、イ
問2
・トレースして求める
文字列として、"10"で考えます。(簡単なので)
求める整数値は、2 となります。
アのresult 1
イのresult 1
ウのresult 1
エのresult 2
正解は、エ
余談
アとイは、ちょっと付け加えて
result+int(binaryの(length-i+1)文字目の文字)x2^(i-1)
result+int(binaryのi文字目の文字)x2^(length-i)
にすればOKですが、エより計算に手間がかかります。
問3
(簡易解法)
「無向グラフの場合は、対称行列になる。」
と本文中に書いてあるので、行列のu行v列とv行u列は同じ値になります。
選択肢の中ではエが、u行v列とv行u列に同じ値1を代入しています。
よって答えは、エ
(問題文からどうやってプログラムを作っていくかを考える。)
目的は、「無向グラフの整数型配列の配列を正方行列で表現する。」です。
それを実現するためのプログラムを作るのですが、まず具体的なものを使って考えます。
具体例
{{1,3},{1,4},{3,4},{2,4},{4,5}}を
行列
00110
00010
10010
11101
00010
にする。
これを見て気がつくのは、
{1,3}がある、1行3列・3行1列が1になっている。
{1,4}がある、1行4列・4行1列が1になっている。
{3,4}がある、3行4列・4行3列が1になっている。
{2,4}がある、2行4列・4行2列が1になっている。
{4,5}がある、4行5列・5行4列が1になっている。
です。ここで最初に書いた目的を具体的に考えれば
配列要素に{i,j}があれば、i行j列・j行i列を1にすればよいことが分かります。
これをプログラムで実現したい。そこで考えた結果が問題に示されているプログラムです。
手順としては、
配列要素を一つ取り出す。
edgeList[i]={i1,i2}
edgeList[i][1]=i1
edgeList[i][2]=i2
行列のi1行i2列・i2行i1列に1を代入する。
adjMatrix[i1,i2]←1
adjMatrix[i2,i1]←1
になります。
上記のことをふまえると、
プログラム中のu,vは、edgeListから取り出したi1,i2を代入した変数になるので、
設問に当てはまる処理は
adjMatrix[u,v]←1
adjMatrix[v,u]←1
になります。
問4
while文が、3つあります。どのような場合にループに入るのかは、
1つ目:data1とdata2の両方に、調べる要素が残っている場合
どちらか片方を調べ終わったらループを抜けます。
2つ目:data1に調べる要素が残っていて、data2には調べる要素が残っていない場合
3つ目:data2に調べる要素が残っていて、data1には調べる要素が残っていない場合
になります。
merge({2,3},{1,4})に適用すると
1つ目のループを3回繰り返し
work={1,2,3,未},i=3,j=2になりループをぬけます。
この時点で、data1には調べる要素が残っていません。
2つ目のwhileループは通らず、3つ目のwhileに入るので、αを1回実行し、j=3になり
ループをぬけて終了。
答えは、イ
2024.07.08 22:35
boyonboyonさん
★FE シルバーマイスター
(No.2)
問5
関連度の式に注目し、公式とプログラム中の変数の対応を調べます。
**arrayM,arrayK,otherItemsの配列表記は省略しています。
公式:(Mxy × 全注文数)/(Mx × My)
プログラム中の変数では、
(arrayM × [c])/(itemCount × arrayK)
公式のxをプログラムの引数のitem
公式のyをプログラムのotherItems
と考えると
arrayMは、Mxy→itemとotherItems両方がある注文数
[c]は、全注文数→これは、ordersの要素数
itemCountは、Mx→itemの注文数
arrayKは、My→otherItemsの注文数
に対応します。
プログラムの
if(orderのいずれかの要素の値がotherItemの値と等しい)
if(orderのいずれかの要素の値がitemの値と等しい)
[a]の値を1増やす①
endif
[b]の値を1増やす②
endif
の部分を考えます。
①になるのは、orderにitemとotherItems両方がある場合
②になるのは、orderにotherItemsがある場合
よって、
[a]は、arrayM
[b]は、arrayK
になります。
解答の選択肢の中では、オが当てはまります。
問6
本文から、
「社内ネットワークも社内PCも介さずにクラウドサービスに接続する場合の不正アクセスのリスクの低減」
に該当するものを探します。
アイは、社内ネットワークなので、除外
オは、逆にゆるくしているので除外
エは、接続対象を少なくしても不正アクセスのリスクの低減にはならないので除外
ウは、認証を厳しくするので不正アクセスのリスクの低減には有効
よって、答えはウ
関連度の式に注目し、公式とプログラム中の変数の対応を調べます。
**arrayM,arrayK,otherItemsの配列表記は省略しています。
公式:(Mxy × 全注文数)/(Mx × My)
プログラム中の変数では、
(arrayM × [c])/(itemCount × arrayK)
公式のxをプログラムの引数のitem
公式のyをプログラムのotherItems
と考えると
arrayMは、Mxy→itemとotherItems両方がある注文数
[c]は、全注文数→これは、ordersの要素数
itemCountは、Mx→itemの注文数
arrayKは、My→otherItemsの注文数
に対応します。
プログラムの
if(orderのいずれかの要素の値がotherItemの値と等しい)
if(orderのいずれかの要素の値がitemの値と等しい)
[a]の値を1増やす①
endif
[b]の値を1増やす②
endif
の部分を考えます。
①になるのは、orderにitemとotherItems両方がある場合
②になるのは、orderにotherItemsがある場合
よって、
[a]は、arrayM
[b]は、arrayK
になります。
解答の選択肢の中では、オが当てはまります。
問6
本文から、
「社内ネットワークも社内PCも介さずにクラウドサービスに接続する場合の不正アクセスのリスクの低減」
に該当するものを探します。
アイは、社内ネットワークなので、除外
オは、逆にゆるくしているので除外
エは、接続対象を少なくしても不正アクセスのリスクの低減にはならないので除外
ウは、認証を厳しくするので不正アクセスのリスクの低減には有効
よって、答えはウ
2024.07.08 22:35
まみさん
(No.3)
可能であれば教えて頂きたいです。問の2番って、例題の通り(戻り値18)に解くとどうなりますか?
2024.07.09 10:41
chihiroさん
★FE プラチナマイスター
(No.4)
binary="10010"とする。
i=1 result←result*2+int("1")=0*2+1=1
i=2 result←result*2+int("0")=1*2+0=2
i=3 result←result*2+int("0")=2*2+0=4
i=4 result←result*2+int("1")=4*2+1=9
i=5 result←result*2+int("0")=9*2+0=18
i=1 result←result*2+int("1")=0*2+1=1
i=2 result←result*2+int("0")=1*2+0=2
i=3 result←result*2+int("0")=2*2+0=4
i=4 result←result*2+int("1")=4*2+1=9
i=5 result←result*2+int("0")=9*2+0=18
2024.07.09 10:52
まみさん
(No.5)
ありがとうございます!
助かりました!
助かりました!
2024.07.09 10:58
シャチ君さん
(No.6)
この投稿は投稿者により削除されました。(2024.07.11 16:55)
2024.07.11 16:55
まささん
(No.7)
問1について教えていただけないでしょうか。
「y and x」「y and y」「z and z」はどう理解すればいいでしょうか?
「y and x」「y and y」「z and z」はどう理解すればいいでしょうか?
2024.07.12 21:16
chihiroさん
★FE プラチナマイスター
(No.8)
x > (y and x) > z
ではなく、
(x > y) and (x > z)
です。
xがyよりも大きい かつ xがzよりも大きい という意味です。
選択肢ウ・オについても同様です。
ではなく、
(x > y) and (x > z)
です。
xがyよりも大きい かつ xがzよりも大きい という意味です。
選択肢ウ・オについても同様です。
2024.07.12 21:24
まささん
(No.9)
ありがとうございます。もし本試験の一問目にこれが出たらパニックになって散々な結果になりそうです。
2024.07.12 21:45
nkkdaiさん
(No.10)
解説を探していたのでとても助かりました。
きのう合格しました。
ありがとうございました。
きのう合格しました。
ありがとうございました。
2024.07.14 07:20
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告