【備忘録】平成30年度秋 応用情報 午前の計算問題

過去問を解いていて思ったのだが、案外厳密な知識がなくても解ける問題が多い

ただ、たまに知らないと太刀打ちできない問題もあるので、ぱっと見で解けるかどうかの判断も重要なのかな、と。

捨てる問題を一瞬で見極められれば、一旦飛ばして別の問題に進むことができる。

時間が余ったら、再度挑戦してみる、というのもいいだろう。

こういった試験特有の感覚も大事になってくるので、練習時は気にしてみよう。

さて、最近始めた応用情報午前の計算問題解説も3回目だ。

今回の対象は、「平成30年度 秋季 応用情報技術者試験 午前」の計算問題。

前回までと同じく、どれが計算問題かは独断と偏見で選んでいる。

問題もここには記載しないので、上のリンク先を参照してほしい。

もし、これも解説してほしいとかあればコメントなりTwitterなりで言ってくれれば対応しよう。

また、備忘録なので誤りが含まれてたら申し訳ない。

というわけで、本編に入っていこう。

スポンサーリンク

問1

オペランド演算の問題。

求めるのは排他的論理和の相補演算、というやつだ。

排他的論理和は、2入力が異なった場合に1を、同じだった場合に0を出力するもの。

また、問題文の解説にもある通り、相補演算単純にビットを入れ替えてあげればいい

というわけで、入力A、Bに対する欲しい結果と、選択肢の内容を表にまとめてみよう。

AB欲しい結果
0011100
0100001
1000001
1111011
入出力の対応

表から、合致するものはだ。

なお、等価演算というのは、入力が両方とも同じ場合に1となるもの

これを知っていれば、排他的論理和とは逆になることが分かるので、そちらで解いてもいい。

問2

M/M/1に関する問題だ。

実は、似たような問題が令和元年度にも出ている。

そのときの解説を上のリンクに貼ったので、気になる人は見てみよう。

この時は式が与えられていたのでよかったが、今回は条件しか与えられていない。

というわけで、以下の式を覚えているかどうかで、この問題が解けるかどうかが決まる。

$$平均待ち時間 = 平均処理時間 \times \frac{利用率}{1 – 利用率}$$

平均処理時間を\(T\)秒、利用率は一旦\(r\)としておこう。

このとき、平均待ち時間が\(T\)秒以上になる\(r\)を聞かれている。

つまり、以下の不等式を解けばいい。

$$T \leq T \times \frac{r}{1 – r}$$

これをゴリゴリ解くと、\(0.5 \leq r\)となる。

よって、50%以上なので、が正解だ。

問3

標準偏差の問題だ。

ここは、知識が必要になる。

まず、標準偏差とは値のばらつきの度合いを表す数値だ。

そして、正規分布に従っている場合、以下のような特徴を持つ。

  • 平均±標準偏差の範囲内に約68.3%の確率でデータが入る
  • 平均±標準偏差×2の範囲内に約95.4%の確率でデータが入る
  • 平均±標準偏差×3の範囲内に約99.7%の確率でデータが入る

ここが、覚えていないといけないポイントだ。

というわけで、各教科の範囲を見てみよう。

教科平均点標準偏差平均±標準偏差平均±標準偏差×2平均±標準偏差×3
A451827~639~81-9~99
B601545~7530~9015~105
C70862~7854~8646~94
D75570~8065~8560~90
計算結果

受講者全体が1000人いるため、上の確率×10をそのまま人数として見ることができる。

今回、90点以上の人数を推定したいので、ちょうど教科Bに境目があり、なおかつそこが最大となっている「平均±標準偏差×2」に着目しよう。

それぞれの教科で、この範囲に954人くらいいる。

つまり、この範囲外にそれぞれ約46人いる、ということになる。

また、正規分布はグラフにすると左右対称のため、これらの範囲外に同じ人数ずついることになる。

よって、各教科で、この範囲よりも下に23人、上に23人いると考えられる。

ここで、Bの高い方に注目すると、90点以上が23人くらいいることが分かる。

他の教科はもっと低い点数も含めて23人なので、Bが一番多いと推定できる、よって答えはだ。

…と書いておきながら、自分で「本当か?」と思っている程度には自信がない。

是非、各自でも正規分布だったり標準偏差だったりを調べてみて欲しい。

問4

BNFの問題だ。

BNF自体を知らなくても、なんとなくでやりたいことは分かるかもしれない。

BNFとは、簡単に言うと文字列の規則を表すもので、今回の問題の場合は以下三つの規則が分かれば解ける。

  • 「<」と「>」で囲まれたものには、それで定義されたものがそこに置き換わる
  • 「|」を挟んでいるものは、そのいずれかがそこに該当する
  • 「<」、「>」で囲まれておらず、かつ「|」でないものは、その文字がそのままそこに置かれる

ちょっと具体例を出してみよう。

日本の郵便番号を表すBNFを書いてみる。

  • <郵便番号> ::= <数字><数字><数字>-<数字><数字><数字><数字>
  • <数字> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<郵便番号>を見ると、ハイフンを挟んで<数字>が前半に3個、後半に4個来ている。

そして、<数字>には、0~9のいずれか一つが入ってくる、というわけだ。

なんとなく掴めただろうか。

問題のBNFをここにも書いておこう。

  • <パラメタ指定> ::= <パラメタ> | (<パラメタ指定>, <パラメタ>)
  • <パラメタ> ::= <英字> | <パラメタ><英字>
  • <英字> ::= a | b | c | d | e | f | g | h | i

<パラメタ指定>を見ると、単に<パラメタ>が来るか、括弧つきで前半に自身、後半に<パラメタ>が来ている。

そして、他に括弧とコンマが使われている個所はない。

つまり、括弧がある場合は必ずコンマで二つに区切られており、なおかつ前半には英字あるいはまた括弧で同じもの、後半には英字が来なければいけない。

ということで、イは外側の括弧内にコンマがないので不適。

ウはコンマの後半に括弧付きが来ているので不適。

エは括弧内にコンマがないので不適。

以上より、消去法でが正解になる。

なお、逆に選択肢の内容をBNFで使われている表記に変えていっても解ける。

アについて。

  • ((abc, def), ghi)
  • ((<パラメタ>, <パラメタ>), <パラメタ>)
  • ((<パラメタ指定>, <パラメタ>), <パラメタ>)
  • (<パラメタ指定>, <パラメタ>)
  • <パラメタ指定>

ということで、正しい。

イについて。

  • ((abc, def))
  • ((<パラメタ>, <パラメタ>))
  • ((<パラメタ指定>, <パラメタ>))
  • (<パラメタ指定>)

これ以上は進めないので誤り。

ウ、エについても途中で進めなくなる。

問6

木構造の問題だ。

問題では、葉以外の全ての要素が二つの子を持ち、かつ深さが全ての葉で等しいと書かれている。

さて、解く前に用語を確認しておこう。

まず、節点とは根や葉を含む全てのノードだ。

別名、頂点とも言ったりする。

次に、これは節点同士を結ぶ線だ。

親を持たない節点子を持たない節点になる。

では、選択肢を順番に見ていこう。

選択肢を見る際の例として、深さ2の木で見ていく。

アについて、深さが2だと節点の個数は7個、枝の個数は6個なので不適。

イについて、根が深さ0で1つの節点、深さ1に2つの節点、深さ2に4つの節点がある。

つまり、\(2^2\)となっているので、不適。

問題文にも深さの定義は書いてあるが、根は深さ0になる点に注意だ。

ウについて、節点の個数は7、深さは2だが、\(\log_2(7) \not = 2\)なので、不適。

というわけで、消去法でが正解だ。

念のため具体例を見ると、葉の個数は4、それ以外は3なので合っている。

問7

どちらかというと等差数列の問題。

jの値を1個ずつ変えていくと個数が分かりやすい。

  • j = 0のとき、iは1から99の99個
  • j = 1のとき、iは2から99の98個
  • j = 2のとき、iは3から99の97個
  • j = 98のとき、iは99の1個
  • j = 99のとき、iは0個

ということで、1から99を全て足せば答えが出てくる。

これを求める式は以下の通り、分からない人は高校数学の等差数列を調べてみよう。

$$\frac{99(1 + 99)}{2} = 4950$$

よって、答えはだ。

問13

問題から何をどう計算すればいいか読み取るタイプだ。

方針としては、最もTPSが高い時間帯のTPSを求め、それが足りるようなCPU数を選んでいく。

まず、上の表を見ると、全て1時間単位になっている。

つまり、単純に表の数字が一番大きい部分のTPSが一番高い。

数字が大きいのは11:00~12:00なので、ここのTPSを求めていこう。

TPSはトランザクション数を秒数で割ればいいので…

$$\frac{43200 + 21600}{3600} = 18$$

よって、一番高いのは18TPSだ。

下の表を見ると、10TPS以上20TPS未満の場合にCPUが2つ必要と書かれている。

以上から、答えはだ。

問14

もはや定番の稼働率の問題だ。

前回解説した平成31年度春にも出てきている。

リンクを貼っておいたので、そちらもよかったら解いてみてほしい。

さて、今回は二つのシステム全体の稼働率を比較する問題だ。

先に、稼働率計算の基本を復習しておこう。

稼働率\(x, y\)の装置が直列に繋がっているとき、どちらも稼働していなければいけないので、全体の稼働率\(R\)はこれらの掛け算で求められる。

$$R = x \times y$$

並列に繋がっているとき、どちらか一方だけ稼働していればいいので、1から両方とも稼働していない率を引くことで全体の稼働率\(R\)を求める。

$$R = 1 – (1 – x)(1 – y)$$

これを踏まえて、問題のシステムを見ていく。

装置X~Zの稼働率を、\(r_X, r_Y, r_Z\)としておこう。

これらは全て0より大きく1未満の数とする。

それぞれ、システムA、B全体の稼働率を\(r_X, r_Y, r_Z\)で表していこう。

まず、システムAの稼働率\(R_A\)は以下の通り。

$$
\begin{eqnarray}
R_A & = & (1 – (1 – r_X)(1 – r_Y)) \times r_Z \\
& = & -r_Xr_Yr_Z + r_Xr_Z + r_Yr_Z
\end{eqnarray}
$$

次に、システムBの稼働率\(R_B\)は以下の通り。

$$
\begin{eqnarray}
R_B & = & 1 – (1 – r_Xr_Z)(1 – r_Y) \\
& = & -r_Xr_Yr_Z + r_Xr_Z + r_Y
\end{eqnarray}
$$

では、これらの大小関係を見ていこう。

とはいっても、二つの式について、前半2項は同じなので、3つ目の項だけ比較すればよい。

AはY、Z二つの稼働率の掛け算、BはYの稼働率になっている。

稼働率\(r_Z\)は0より大きく1より小さいので、掛け算されている方が小さくなる。

さらに、\(r_Y\)が0なら両者とも一致するが、これも0より大きいので一致することもない。

以上から、常にシステムBの方が稼働率が大きく、選択肢はが正しい、ということになる。

問15

知識と計算、両方必要な問題だ。

まず、MTBFMTTRについて解説をしておこう。

MTBFとは平均故障間隔システムが稼働してからどのくらい経過したら故障するかを表している。

MTTRとは平均復旧時間システムが故障してから復旧させるまでの時間を表している。

例えば、MTBFが9時間、MTTRが1時間だとすると、9時間稼働して故障し、復旧して再度稼働するまでに1時間かかる、というイメージだ。

これが分かっていると、この二つから稼働率も求めることができる。

上で出した例について、稼働・故障の1サイクル全体は9 + 1 = 10時間ある。

そのうち、MTBFの9時間分稼働しているので、稼働率は9 ÷ 10 = 0.9となる。

このように、MTBFとMTTRから、以下の式で稼働率を求めることができる。

$$稼働率 = \frac{MTBF}{MTBF + MTTR}$$

これを踏まえて、選択肢を見ていこう。

まずアについて、稼働率を0.5として式変形をしてみよう。

$$
\begin{eqnarray}
0.5 & = & \frac{MTBF}{MTBF + MTTR} \\
0.5 \times (MTBF + MTTR) & = & MTBF \\
MTBF + MTTR & = & 2 \times MTBF \\
MTTR & = & MTBF
\end{eqnarray}
$$

等しくなったので、が正解だ。

ちなみに、イとエは上の説明から間違いだと分かるだろう。

ウについて、稼働率の式をMTTRについて求める形に変形してみよう。

途中計算は省略するが、結果的に以下のような形になる。

$$MTTR = MTBF \times \frac{1 – 稼働率}{稼働率}$$

よって、これも間違いだ。

問16

ジョブ実行の問題。

タイムクウォンタムが設定されており、それが十分に短い。

つまり、3つのジョブが並列で実行されるとみなせる

ちょっと考えてみよう。

まず、最初は三つを切り替えながら実行する。

つまり、例えば1分経過した時点で、三つとも20秒分の処理が終わっている、ということになる。

この計算でいくと、15分でAが終わり、それまでで各ジョブとも5分処理したことになっている。

ここから、今度はB、C二つのジョブを切り替えながら実行していく。

こちらは、1分あたり各30秒分の処理が行われていく。

これでBについて残り5分の処理をするとき、全体では10分かかっている。

よって、最初の15分、次の10分でジョブBが完了するので、答えは25分、になる。

なお、これは私が解いた方法だが、解説ではタイムクウォンタムを1分として具体的に計算していた。

どちらでも解けるので、分かりやすい方を選択しよう。

問18

ページングに関する時間の問題だ。

これに限らず、よく割合に関する問題が出てくるので、このタイプは是非解けるようにしておきたい。

まず、求めたい割合、つまりページインだけの割合を\(x\)としておこう。

すると、ページアウトを伴う割合を\(1 – x\)と表せる。

ページインだけの場合の処理時間は20ミリ秒、ページアウトを伴う場合は60ミリ秒、その平均が30ミリ秒なので、計算式を作ると以下のようになる。

$$20x + 60(1 – x) = 30$$

あとは解くだけだ。

\(x\)を求めると、\(x = 0.75\)となる。

よって、選択肢のが正解だ。

問20

落ち着いて見ればそんなに難しくない問題だ。

まず、直線上の求めたい座標を計算していこう。

(5, 4)から(9, 8)まで真っすぐ線を引くので、x = 7であればyも4に2を足して(7, 6)となる。

では、この座標からメモリの先頭を求めていく。

注意点は、図を見れば分かるが1画素に対して二つの番地を使うこと。

つまり、0番目の画素は0番地と1番地、1番目の画素は2番地と3番地、といった感じだ。

ここから、求めたい画素が何番目か分かれば、それを2倍すればメモリの先頭番地が出てくることが分かる。

そして、yは1増えるごとに640個の画素を数えることになるので、以下の式になる。

$$(640 \times 6 + 7) \times 2$$

これを計算すると、7694となるので、答えはだ。

問23

これも頻出、論理回路の問題。

今、二つの入力A、Bに対し、加算して桁上がりがあればXを1、足した結果の1の位をYに出力する。

素直に真理値表を作ろう。

ABXY
0000
0101
1001
1110
真理値表

ここから、XはA AND B、YはA XOR Bとなればいい。

これに合致する回路はだ。

問27

ハッシュの衝突に関する問題。

三つの数字571, 1168, 1566が全て衝突する除数は何か、というものだ。

選択肢それぞれで割ってもいいが、それだとちょっと計算の量が多い。

そこで、ちょっと別アプローチで攻めてみよう。

先に法則を一つ紹介する。

二つの自然数\(a, b\)をさらに別の自然数\(n\)で割ったときの余りが一致する場合、\(a\)と\(b\)の差は\(n\)の倍数となる。

簡単に、これを証明してみる。

今、余りが一致するので、それを\(M\)としておこう。

二つの自然数\(a, b\)を、これまた別の自然数\(A, B\)を使って、以下のように書き直す。

  • \(a = nA + M\)
  • \(b = nB + M\)

なお、\(A, B\)はそれぞれ\(n\)で割ったときの商だ。

これについて、\(a – b\)を計算していく。

$$
\begin{eqnarray}
a – b & = & nA + M – (nB + M) \\
& = & nA – nB \\
& = & n(A – B)
\end{eqnarray}
$$

よって、\(a – b\)は\(n\)の倍数となる。

言い換えると、問題の3つの数について、どの二つの差も除数の倍数となっているのだ。

というわけで、一つ計算してみよう。

$$
\begin{eqnarray}
1566 – 1168 & = & 398 \\
& = & 2 \times 199
\end{eqnarray}
$$

差が199の倍数となったので、答えはになる。

このことを知らなかったら、実際に選択肢の数で割って、余りを比較してあげればいい。

問31

通信速度の問題だ。

1000バイトのデータを端末Aから端末Bに送った時、何ミリ秒かかるか、というもの。

計算の都合上、ビットに合わせたいので8000ビットとしておこう。

まず経路を見ると、二つのレイヤ3スイッチを経由し、3つのLANを通ることが分かる。

とりあえず、LAN1本分の時間を求めていこう。

LAN1本は100Mビット/秒、求めたいのがミリ秒なので単位を変えて、100Kビット/ミリ秒だ。

キロも直しておこう、100000ビット/ミリ秒となる。

これで送るデータ量8000ビットを割ると…

$$\frac{8000}{100000} = 0.08$$

ということで、LAN1本あたり0.08ミリ秒かかる。

これが3本と、各スイッチで0.2ミリ秒かかるので…

$$0.08 \times 3 + 0.2 \times 2 = 0.64$$

以上より、0.64ミリ秒、が正解になる。

問34

アドレスの問題。

ネットワークアドレス10.16.32.64/26内で末尾から降順に割り振るとき、10番目のアドレスは何かというものだ。

まず、2進数に直して上から26桁がネットワークアドレスなので、第4オクテットだけ見ていこう。

最後の6桁がホスト部になるので、その後ろから数えていく…のだが。

一つ注意が、ホストアドレスが全て1のアドレスについてはブロードキャストが該当するため、その次からでないと割り振れない。

これを踏まえると、1台目が11 1110という形になる。

2台目が11 1101、3台目が11 1100、…と数えていくと、10番目は11 0101となる。

よって、10番目のIPアドレスの第4オクテットは、2進数で0111 0101となり、10進数に直すと117だ。

第三オクテットまではネットワークアドレスと同じなので、最終的にIPアドレスは10.16.32.117となり、が正解だ。

問53

工数の問題だが、例年出ているような図ではなく、割合の問題になっている。

全体で120人月の工数、12か月で終わらせる条件で、各工程の工数、期間それぞれの比率も提示されている。

方針はそんなに難しくなく、各工程で具体的な工数と期間を算出し、そこから人数を求めればいい。

というわけで、実際の工数と期間を算出してみよう。

工程工数比率工数期間比率期間
仕様設計35%42人月50%6か月
プログラム作成45%54人月25%3か月
テスト20%24人月25%3か月
実際の工数と期間

ここから、実際に何人必要かを求めていく。

単純に工数を期間の月数で割れば人数が出てくるので、仕様設計から順に7人、18人、8人となる。

一番多いのが18人なので、答えはとなる。

…というのが正攻法だろう。

実は、今回の場合限定だがぱっと見で答えを出せる。

まず、全工程で通して考えると、120人月で12か月なので、10人となる。

このパターンになるのは、それぞれの工程で工数比率と期間比率が一致する場合だ。

次に、プログラム作成の工程に着目すると、工数比率が期間比率よりも高い。

よって、ここは10人では足りない。

選択肢を見ると、11人以上はエの18人しかないので、それが答えになる、というわけだ。

しっかり計算すべきではあるが、どうしても時間がない場合はこんなふうに推測してみるのも手かもしれない。

問73

部品個数の問題だ。

ここまで解説してきた2回には出てなかったが、過去問アプリではよく見るタイプ。

まず、製品Aを1つ作るのに必要な部品Dの総数を求めてみよう。

製品A1個に対しユニットBは4個必要、ユニットB1個に対し、部品Dは3個必要。

こちらについては、4 × 3 = 12だ。

次に、製品A1個に対しユニットCは1個必要、ユニットC1個に対し、部品Dは1個必要。

よって、こちらは1個。

合計して、製品Aを1個作るためには部品Dは13個必要になる。

今、製品Aを10個作りたいので、まず全体で部品Dは130個必要になる。

次に、ユニットBがすでに5個あるので、部品Dに換算すると5 × 3 = 15個分だ。

また、部品D自体も25個残っているので、130からこれらを引いた90がこれから必要になる。

よって、答えは90個、だ。

問77

これも定番、損益分岐点分析の問題。

とはいえ、基本的な部分だけで解ける。

まずは、その基本的な計算をおさらいしておこう。

売上高、変動費、固定費、利益の関係について、以下が成り立っている。

$$利益 = 売上高 – 変動費 – 固定費$$

次に、変動費率売上高に対する変動費の割合なので、以下の式で求められる。

$$変動費率 = \frac{変動費}{売上高}$$

これらを使って、連立方程式を作ろう。

まず、変動費率が変わらないので\(x\)、固定費を\(y\)とする。

変動費率の式から、変動費は売上高に変動費率を掛ければ求まるので、売上が7000万、9000万それぞれの場合で考えると以下の連立方程式が得られる。

$$
\left \{
\begin{array}{l}
-200 = 7000 – 7000x – y \\
600 = 9000 – 9000x – y
\end{array}
\right .
$$

今欲しいのは変動費率、つまり\(x\)だけなので、それを求めると\(x = 0.6\)となる。

あとは売上8,000万円のときの変動費を求めればいいので…

$$8000 \times 0.6 = 4800$$

より、変動費は4,800万円、答えはだ。

コメント

タイトルとURLをコピーしました