読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

aoj 0085

ヨセフのおイモ | Aizu Online Judge
愚直にやるとこうなる

main(n,m,i,c,p){while(scanf("%d %d",&n,&m),n){int a[1010]={};c=p=0;while(c++!=n){for(i=0;i++<m;)while(a[++p%n]){}a[p%=n]++;}printf("%d\n",p?p:n);}}

すごい答え

m,p,i;main(n){for(;i<n||~scanf("%d%d",&n,&m,i=m&&!printf("%d\n",1+p));p%=++i)p+=m;}

同じアルゴリズムrubyの答え

#!ruby -na
x&&=p x+1
n,m=$F
x=y=0
x=(x+m.to_i)%y+=1while y<n.to_i

ヨセフスの問題 - Wikipedia
これが参考になるかも
案外奥深くかつ有名な問題