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

春休みの暇つぶし その02
夏季オリンピックの開催年を出力するプログラムを作りましょう。

2020年には東京でオリンピックが開催されます。日本全体の雰囲気がオリンピックに向かいつつあるのはいいことですが、反面、まちづくりやいろいろな制度の整備の面で、「オリンピックまでになんとかすればいいや」という雰囲気も感じます。
東京オリンピック開催まであと3年。その頃みなさんはもう5年生。オリンピックを言い訳にして今やるべきことを後回しにしないような、立派な高専生になっているといいですね。

仕様

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

メモ

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

元ネタ

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

提出方法

  • こちらからどうぞ。
  • 完成してなくても、「ここまでできたけどこの先がわからんHELP!」でもOKです。
    • LINEやTwitterで聞いてください。

実行例

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

ソースコードの例

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

オリンピック開催回数分の配列を用意し、添字を開催回、要素を開催年としました。
(例: 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;
}

おまけ

函館の有名なすき焼き屋「阿佐利 本店」のすきやき弁当。

阿佐利本店 すきやき弁当