【基本情報科目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 |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 12 |
| 3 | 12 | 123 |
| 4 | 123 | 1234 |
さて、毎回共通している処理は何でしょうか。
次の空欄を埋めてみましょう。
新しいresult = 前のresult × ______ + 届いた数字










ディスカッション
コメント一覧
まだ、コメントがありません