ページ

2012/08/06

[競技プログラミング][PHP][天下一プログラマーコンテスト2012]算盤の書

A - 算盤の書

時間制限 : 2sec / スタック制限 : 10MB / メモリ制限 : 64MB

問題文

ある数学者は次の問題を考案したという。

1 つがいの兎は、産まれて 2 か月後から毎月 1 つがいずつの兎を産む。
兎が死ぬことはない。
この条件のもとで、産まれたばかりの 1 つがいの兎は 1 年の間に何つがいの兎になるか?
※つがい:オスとメスの一組


この問題は上の問題をもとにした問題です。
今、 1 つがいの産まれたばかりの兎がいるとします。
上の問題の条件と同様に兎が増えるとすると、 n ヶ月後に何つがいの兎がいるでしょう?
このとき、 n ヶ月後ちょうどに産まれた兎のつがいも数に含めます。

入力

入力は以下の形式で標準入力から与えられる。
n
何ヶ月後かを表す整数 n (0≤n≤45) が 1 行で与えられる。

出力

n ヶ月後の兎のつがいの数を標準出力に 1 行で出力せよ。
なお、行の終端には改行が必要である。

出典

A: 算盤の書 - 天下一プログラマーコンテスト2012 予選A | AtCoder

回答

AtCoder/tenka1_2012_A_1.php at master · wada811/AtCoder · GitHub
<?php
fscanf(STDIN, "%d", $n);
$usage   = 1;
$usagee  = 0;
$usageee = 0;
for($i = 0; $i < $n; $i++){
    $usageee += $usagee;
    $usagee   = $usage;
    $usage    = $usageee;
}
$count = $usage + $usagee + $usageee;
echo $count.PHP_EOL;
?>
有名なねずみ算をウサギに置き換えた問題。
なんでウサギなんだろうと思っていたらTwitterで話題のUsagee Inc.が思い浮かんだので
変数名が自動的に決まりました。
リーダブルコードが似たものは縦を揃ええて似せて書くとか言っていたらしいので
そう書いたら美しくなった。持ってないから読みたいなぁ。