【基本情報科目B】事件発生!CPUはプログラムを忘れた ― あなたは4桁の整数を復元できるか?

広告

基本情報技術者試験(FE)の科目Bでは、プログラムを読んで

「この処理は何をしているのか?」

を考える問題が数多く出題されます。

しかし、初学者の多くは

「公式を覚えていないから解けない」

と思ってしまいます。

実は科目Bは暗記する試験ではありません。

CPUになって推理する試験です。

今回は、あなた自身がCPUになり、4桁の整数を復元する事件に挑戦してみましょう。


🚨事件発生!

あるコンピュータから、CPUへ4桁の整数が送られてきています。

しかし、その整数が何なのかは分かりません。

通信回線は、

1文字ずつしかデータを送ることができません。

さらに、大変なことが起きました。

CPUは処理を一部忘れてしまいました。

それでもCPUは、

正しい4桁の整数を完成させなければなりません。

あなたはCPUになって、

この事件を解決してください。



CPUの仕様書

今回のCPUには次の制限があります。

通信のルール

  • 通信回線は1文字ずつしか送れません。
  • CPUは今届いた1文字だけを見ることができます。
  • CPUは未来の数字を見ることはできません。

CPUのルール

  • CPUには引き出し(変数)result が1つだけあります。
  • resultには整数しか保存できません。
  • 文字をつなげる(連結する)ことはできません。
  • CPUが使える計算は掛け算足し算だけです。
  • CPUは毎回同じ処理を繰り返します。

つまり、

"12"

という文字列は作れません

扱えるのは

12

という整数だけです。



現場に残されていた証拠

事件現場には、

CPUの途中結果だけが残っていました。

届いた回数result
1回目1
2回目12
3回目123
4回目1234

どうやらCPUは、

毎回同じ仕事をしているようです。



🔍謎解きコーナー

ここからはあなたの出番です。

CPUになったつもりで考えてください。


謎①

最初に届いた数字は

1

でした。

CPUは

result = 1

にしました。

ここまでは簡単ですね。


謎②

次に

2

が届きました。

CPUは

result = 12

にしました。

しかしCPUは

  • 文字をつなげられません
  • 掛け算と足し算しか使えません

CPUは何をしたのでしょう?


謎③

さらに

3

が届くと

result = 123

になりました。

CPUはまた同じ処理をしています。

どんな仕事をしたのでしょう?


謎④

CPUが毎回している仕事を日本語で書いてみましょう。

① ___________________

② ___________________


追加チャレンジ問題

ここまでの謎解きで、CPUは毎回同じような処理をしていることが分かってきました。

では、今度は自分で式を考えてみましょう。

ポイントは、文字をつなげるのではなく、整数として計算することです。


チャレンジ①

最初の状態では、

result = 0

とします。

そこへ、最初の数字

1

が届きました。

このとき、

result = 1

にするには、どのような計算をすればよいでしょうか。

result = ____________________

チャレンジ②

次に、数字

2

が届きました。

いま、

result = 1

です。

これを

result = 12

にするには、どのような計算をすればよいでしょうか。

result = ____________________

ヒント:

1

10

の位に移動させるには、どうすればよいでしょうか。


チャレンジ③

さらに、数字

3

が届きました。

いま、

result = 12

です。

これを

result = 123

にするには、どのような計算をすればよいでしょうか。

result = ____________________

ヒント:

12

120

にしてから、届いた数字を足します。


チャレンジ④

最後に、数字

4

が届きました。

いま、

result = 123

です。

これを

result = 1234

にするには、どのような計算をすればよいでしょうか。

result = ____________________

共通するルールを見つけよう

ここまでの処理を表にしてみます。

届いた数字前のresult新しいresult
101
2112
312123
41231234

さて、毎回共通している処理は何でしょうか。

次の空欄を埋めてみましょう。

新しいresult = 前のresult × ______ + 届いた数字

訪問数 2 回, 今日の訪問数 2回

広告