章末問題

ぐるぐまわーる


以下の問題を用意しておきました。解いてプログラミングになれましょ。

例題 1

1 つの整数の入力を受け取れ。

そして、1 からその数までを、一つづつ増やしながら出力せよ。

入力が 1 より小さいときは何も出力しないこと。

このように動作せよ。

入力1:

8

出力1:

12345678

入力2:

-1

出力2:


解き方

方針を考えてみよっか。

  1. 入力を受け取る変数を 1 つ用意する。
  2. 入力を変数に受け取る。
  3. 制御変数を用意し、1 で初期化する。
  4. 制御変数が入力以下であればループする。
    1. 制御変数の数値を出力する。
    2. 制御変数を 1 増やす。

実装してみよう。

#include <iostream>
int main() {
  int input;
  std::cin >> input;
  int count = 1;
  while (count <= input) {
    std::cout << count;
    ++count;
  }
}

ちなみに、for で書くとこうなる。こちらが書けるようになろう。

#include <iostream>
int main() {
  int input;
  std::cin >> input;
  for (int count = 1; count <= input; ++count) {
    std::cout << count;
  }
}

問 1

階乗 というのは、1 からその数までをすべて掛けた数 のこと。

例えば、3 の階乗1 × 2 × 3 = 6 になる。

1 つの自然数の入力を受け取れ。そして、その階乗を出力せよ。

このように動作せよ。

入力:

8

出力:

40320

※入力に 17 以上の値を入れると結果がおかしくなると思うけど、その対処法は別の回でやるよ。

問 2

まず、英語圏には "Fizz Buzz" という数を数える言葉遊びがありまして、

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz ...

みたいになる。3 の倍数は "Fizz"、5 の倍数は "Buzz"、15 の倍数は "FizzBuzz"、それ以外はそのまま答える遊び。

今回はこれをプログラムで再現してみる。機械は失敗しないので。

1 つの整数の入力を受け取れ。

そして、その数まで "Fizz Buzz" を行え。

このように動作せよ。

入力:

11

出力:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11