パズル:nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する その2

問題:1からnまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する。

パズル:nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する – NAL-6295の舌先三寸

出力された値を眺めていたら、どうも法則があることが分かった。

3は例外として、それ以降の値については、常に前回値×6-(前々回値-2)となるっぽい。

多分、知っている人には当たり前の事なんだろうなと思いつつ。

数式にするとこんな感じ?勉強していないので表記が間違っているかもしれませんが・・・

N¥tiny nを任意の整数とし

N¥tiny 0¥large =-1

N¥tiny 1¥large =0

としたとき、

N¥tiny n+1¥large=N¥tiny n ¥large 6-(N¥tiny n-1 ¥large -2)

となる。

初めて、texというのをつかったけど、こんなんで良いのかな?

間違っていたら教えてください。

でも、なんで成り立つのか分からないな。

03
20 3*6-(0-2)
119 20*6-(3-2)
696 119*6-(20-2)
4059 696*6-(119-2)
23660 4059*6-(696-2)
137903 23660*6-(4059-2)
803760 137903*6-(23660-2)

というわけで、プログラムに反映してみた。

ついでなので、仕様もintの範囲で該当する数字全てにしてみた。

public void nまでの整数を二つの組に分けて合計した結果が同じだった数字リスト()
{
Console.WriteLine(3);
int 前回の値 = 3;
int 前々回の値 = 0;
while ((long)前回の値 * (long)6 <= int.MaxValue)
{
int 今回の値 = 前回の値 * 6 - (前々回の値 - 2);
Console.WriteLine(今回の値);
前々回の値 = 前回の値;
前回の値 = 今回の値;
}
}

前のコードだとぜんぜん終わらなかったのに、一瞬で終わるようになった。

当たり前か・・・。

Share
カテゴリー: C#