カメヲラボ

主にプログラミングとお勉強全般について書いてます

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)));}