体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

「等比? 等差? フィボナッチ?? 」問題の解題・解説

概要とか

「等比? 等差? フィボナッチ??」という問題が先日締め切られました。挑戦者数が多い割に正答率が低く、初回投稿の正解率10%以下という状況でした。

間違ってしまった方のために、何がまずかったのか、どうすればよかったのかをコードを交えて解説させていただきたいと思います。

まずは問題のおさらいです。今回の問題は以下のような内容でした。

div.nabesg{width:450px;float:right;}table.nabe{margin-left:30px;}img.nabe{float:right;width:400px}table.nabe td, table.nabe th{padding:3px;}table.nabe th{background-color: #ccc;}table.nabe td{background-color: #ddd;}code.nabe{border:solid 1px #ccc;font-family:”Courier”;}td code.nabe{border:none;}ol.nabe li{margin-left:2em;}ul.nabe li{margin-left: :1em;}.center{text-align:center;}.right{text-align:right;}blockquote.nabe{border:solid 1px;padding:1mm 1mm 1mm 1mm ;}【概要】

数列を与えます。
与えられた数列が以下のいずれの数列(の、途中の連続した5項)なのかを判別するプログラムを書いてください。
記号
名称
G
等比数列
A
等差数列
F
フィボナッチ数
x
G, A, F のいずれにも該当しない
【入出力】

入力は
1 2 4 8 16
こんな感じです。
スペース区切りで 5個の10 進数が並んでいます。

出力は、
G
のように、G, A, F, x のいずれかを出力してください。
末尾の改行はあってもなくても構いません。
【例】
入力
出力
1 2 4 8 16
G
1 2 3 4 5
A
3 5 8 13 21
F
1 2 123 1234 9999
x
【補足】
入力に含まれる値は、1以上、100億以下の整数です。
入力は、全て狭義単調増加列になっています。
不正な入力に対処する必要はありません。
G, A, F は大文字ですが、 x は小文字です。
1, 4, 5, 9, 14, 23, … という数列はフィボナッチではありません。
【解答方法】

■挑戦言語は下記のプログラム言語選択で選択可能なものであれば何でもOKです。
自分の書いたプログラム言語を選択
解答欄にソースコードを記入
送信前に「提出前に確認」ボタンをクリック(構文エラーがないかどうかチェックできます)
「解答コードは正常に実行されました」というメッセージを確認の上、「解答を送信」ボタンで解答してください。

■この問題にはテストケースが12件用意されています。すべてに通れば正解です!
【採点について】
採点は「ideone」を使ってプログラムを実行し、標準入力および標準出力のテストケースと照合して正誤を判定します
各言語の標準入力と標準出力はこちらを参考にしてください

※なおCodeIQで使用しているideoneは企業版のため、webで公開されているコンシューマー版ideoneとは対応言語・バージョン・挙動が異なるかもしれません。実行くんとも異なるかもしれません。
企業版ideoneの対応バージョンは、「提出前チェック」の結果とともに表示されます。

問題の方は、5要素の数列が

等比数列
等差数列
フィボナッチ数列の一部
上記以外

のどれに該当するのかを答えるだけというシンプルなものでした。入力となる数は、1〜100億の整数で、昇順に整列済みです。

実際のテストケースは以下の通りでした:

#
テストケース
正解
1

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

山寺宏一&高木渉で『ポプテピピック』

GetNews girl / GetNews boy