ガジェット通信

見たことのないものを見に行こう

【謎解きプログラム】計算式を当てよ!【変数と演算子】解答と解説

DATE:
  • ガジェット通信を≫

【謎解きプログラム】計算式を当てよ!【変数と演算子】

本問題は、「計算式を当てよ!」というテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内に謎が解けない場合は、このPCのデータは消失する。

 謎は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

説明

法則を見つけよう!

上段の数字を元に、中段の計算式を実行すると、下段の数字になります。

上段の数字は、x, yなどの記号として、計算式を組み立てるものとします。

上段の数字から、下段の数字を導き出す、計算式を選択肢から選んでください。

(記号:+ 加算、- 減算、* 乗算、/ 除算、% 剰余)

問題1

// 問題
1, 2, 3, 4 …… x
↓ 計算式 ↓
1, 4, 9, 16

// 選択肢
x + x + x
x * x
(x – 1) * x

以下、選択肢の式を適用した場合に、計算結果がどうなるか見ていきます。

// 計算の適用

「x + x + x」の場合
x 計算結果
1 2
2 6
3 9
4 12

「x * x」の場合
x 計算結果
1 1
2 4
3 9
4 16

「(x – 1) * x」の場合
x 計算結果
1 0
2 2
3 6
4 12

上記の通り、答えは2番目の選択肢の『x * x』になります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
class Main{
public static void main(String[]args) {
// 問題
out(1);
out(2);
out(3);
out(4);
}
// 関数
public static void out(int x) {
int answer = x * x;
System.out.println(x + ” → ” + answer); // 出力
}
}

// 出力結果
1 → 1
2 → 4
3 → 9
4 → 16

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 関数
var out = function(x) {
var answer = x * x;
console.log(x + ” → ” + answer);
};

// 問題
out(1);
out(2);
out(3);
out(4);

// 出力結果
1 → 1
2 → 4
3 → 9
4 → 16

問題2

// 問題
1, 2, 3, 4 …… x
0, 1, 2, 3 …… y
↓ 計算式 ↓
2, 3, 4, 5

// 選択肢
x + y + x
x – y + x
x * y / x

以下、選択肢の式を適用した場合に、計算結果がどうなるか見ていきます。また、参考として、上記のx, yの範囲で式を変形した結果も掲載しておきます。

// 計算の適用

「x + y + x」の場合
x y 計算結果
1 0 2
2 1 5
3 2 8
4 3 11

参考:
「y = x – 1」として
x + (x – 1) + x → 「3x – 1」

「x – y + x」の場合
x y 計算結果
1 0 2
2 1 3
3 2 4
4 3 5

参考:
「y = x – 1」として
x – (x – 1) + x → x – x + 1 + x → 「x + 1」

「x * y / x」の場合
x y 計算結果
1 0 0
2 1 1
3 2 2
4 3 3

参考:
x * y / x → 「y」

上記の通り、答えは2番目の選択肢の『x – y + x』になります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
class Main{
public static void main(String[]args) {
// 問題
out(1, 0);
out(2, 1);
out(3, 2);
out(4, 3);
}
// 関数
public static void out(int x, int y) {
int answer = x – y + x;
System.out.println(x + ” ” + y + ” → ” + answer); // 出力
}
}

// 出力結果
1 0 → 2
2 1 → 3
3 2 → 4
4 3 → 5

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 関数
var out = function(x, y) {
var answer = x – y + x;
console.log(x + ” ” + y + ” → ” + answer);
};

// 問題
out(1, 0);
out(2, 1);
out(3, 2);
out(4, 3);

// 出力結果
1 0 → 2
2 1 → 3
3 2 → 4
4 3 → 5

問題3

// 問題
1, 2, 3, 4 …… x
2, 3, 4, 5 …… y
↓ 計算式 ↓
2, 4, 6, 8

// 選択肢
(x + x + y) % x
(x * y) % x
(x % y) + x

以下、選択肢の式を適用した場合に、計算結果がどうなるか見ていきます。また、参考として、上記のx, yの範囲で式を変形した結果も掲載しておきます。

// 計算の適用

「(x + x + y) % x」の場合
x y 計算結果
1 2 0
2 3 1
3 4 1
4 5 1

参考:
「y = x + 1」として
(x + x + (x + 1)) % x → (3x + 1) % x → 「1 % x」

「(x * y) % x」の場合
x y 計算結果
1 2 0
2 3 0
3 4 0
4 5 0

参考:
(x * y) % x → x * y は、xで割り切れるので → 「0」

「(x % y) + x」の場合
x y 計算結果
1 2 2
2 3 4
3 4 6
4 5 8

参考:
「y = x + 1」として
(x % (x + 1)) + x → x + x → 「2x」

上記の通り、答えは3番目の選択肢の『(x % y) + x』になります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
class Main{
public static void main(String[]args) {
// 問題
out(1, 2);
out(2, 3);
out(3, 4);
out(4, 5);
}
// 関数
public static void out(int x, int y) {
int answer = (x % y) + x;
System.out.println(x + ” ” + y + ” → ” + answer); // 出力
}
}

// 出力結果
1 2 → 2
2 3 → 4
3 4 → 6
4 5 → 8

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 関数
var out = function(x, y) {
var answer = (x % y) + x;
console.log(x + ” ” + y + ” → ” + answer);
};

// 問題
out(1, 2);
out(2, 3);
out(3, 4);
out(4, 5);

// 出力結果
1 2 → 2
2 3 → 4
3 4 → 6
4 5 → 8

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP