オリンピックの開催年を出力するプログラム

夏季オリンピックの開催年を出力するプログラムを作りましょう。

仕様

  • 西暦を入力すると、その年に開催されたオリンピックが第何回だったのかを出力するプログラムを作成せよ。
  • 入力された年にオリンピックが開催されていない場合はその旨を表示し、その次に開催されるオリンピックについて出力せよ。
  • 想定される入力は、1896から2020とする。

メモ

  • 第1回は1896年(アテネ)です。
  • 開催されなかった年について
    • 第6回(1916年:ベルリン)は第一次世界大戦により開催されなかった。
    • 第12回(1940年:ヘルシンキ)、 第13回(1944年:ロンドン)は第二次世界大戦により開催されなかった。
    • 開催されなかった場合もオリンピアードの回数はカウントされるので注意。
      • 例: 1916年の第6回は開催されなかったが、1920年のオリンピックは第7回となる。

元ネタ

プログラミングスレまとめ in VIPより、オリンピックの開催年を出力するプログラムを元に改変しました。

実行例

オリンピックの開催年を出力するプログラムの実行例

ソースコードの例

上記の実行例は、以下のコードをコンパイル・実行したものです。

オリンピック開催回数分の配列を用意し、添字を開催回、要素を開催年としました。
(例: years[1] = 1900は第2回 1900年を表す。配列の添字は0から始まるのでyears[1]は第2回を表すことに注意!)

years[i]の要素がinputより小さくなった時点でループ終了。なお、開催されなかった回の年の要素は-1で上書きしています。

「1944年の第13回は第二次世界大戦により開催されませんでした。」という風に、開催されなかった理由を出力することもできるので、そういう場合は素直にif文でやっていくほうがいいでしょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>

int main(void)
{
        int years[32];
        int input;
        int i;

        for (i = 0; i < 32; i++) {
                years[i] = 1896 + i * 4;
                if (years[i] == 1916 || years[i] == 1940 || years[i] == 1944) {
                        years[i] = -1;
                }
        }

        printf("西暦を入力\n--> ");
        scanf("%d", &input);

        if (input < 1896 || input > 2020) {
                printf("不正な入力です。\n");
        } else {
                for (i = 0; i < 32; i++) {
                        if (input == years[i]) {
                                printf("%d年開催のオリンピックは第%02d回です。\n", input, i + 1);
                                break;
                        } else if (input < years[i]) {
                                printf("%d年にはオリンピックは開催されていません。\n", input);
                                printf("次のオリンピックは、第%02d回(%04d年)です。\n", i + 1, 1896 + i * 4);
                                break;
                        }
                }
        }

        return 0;
}