愚直なシミュレーションでも動くことを確認.
public class LockersDivOne{
public int lastOpened(int n){
int[] a=new int[n];
int[] b=new int[n];
int last=n;
for(int i=0;i<n;i++)
a[i]=i;
for(int s=2;;s++){
int k=0;
for(int i=0;i<last;i++){
if(i%s!=0)
b[k++]=a[i];
}
last=k;
if(last<=1)
return b[0]+1;
for(int i=0;i<last;i++)
a[i]=b[i];
}
}
}
0 件のコメント:
コメントを投稿