The Drunk Jailer(2)
最短コード63B
答えは小さい順に2,3,4...と一つずつ増えているが、値が増えるタイミングというのが興味深い。
n=5,6,7,8の時に解は2、解が2から3に増えるのは、n=9の時だ。同じように解が3から4に増えるのは、n=16の時。4から5になるのはn=25の時。
要するに、nの値が3^2,4^2,5^2...を越えたところで1ずつカウントを増やすプログラムを書くだけということになる。これなら超ミジカーなコードが書けそうだ。
しかしカウントを増やすタイミングがせっかくk^2になっているのだから、わざわざfor文でカウントする必要も無い。sqrt()を使って小数点以下を切り捨てれば良いのだ。
というかんじで、63バイトの超短いコードができた。
main(i,n){for(;~scanf("%d",&n);--i&&printf("%d\n",n=sqrt(n)));}