Card Trick
なんかシャッフルする問題。ちゃんとした説明は例によってnanagyouさんのところから。
http://geocities.yahoo.co.jp/gl/nanagyou/view/20070312/1173632750
賢いアルゴリズムが見つかれば大幅に短縮できると思いますが、ベタな解き方しか思い浮かびませんでした(;´д`)
a[999];i,*k=a,p; main(n,j){ for(gets(j);~scanf("%d",&n);p=i=puts(a)) { for(;i<n;k[p]=i) for(j=++i;~j;j-=!k[++p])p%=n; for(;*++k;)printf("%d ",*k); } }
配列の0番目は改行用。初期化をするとどうしてもコードが長くなってしまうので、使いっぱなしの方向で。なんか良い方法ありそうな気がするのですが・・・。