您的位置:首页 > 其它

Poj 1012 Joseph

2013-10-30 18:36 316 查看
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
public static void main (String [] args) throws Exception {
Scanner scan = new Scanner(System.in);
int arr[] = new int[14];
for(int i=1;i<14;i++){
int sum = 2*i;
int start = i+1;
while(true){
if(judge(i,sum,start,0)){
arr[i] = start;
break;
}else{
start++;
}
}
}
while(true){
int k = scan.nextInt();
if(k==0) break;
System.out.println(arr[k]);
}
}
public static boolean judge(int k,int sum, int m, int now){
if(sum==k) return true;
else{
now = (m+now-1)%sum+1;
if(now<=k){
return false;
}else{
return judge(k,sum-1,m,now-1);
}
}
}
}

下一个位置的公式要想一下。 next = (current+m-1)%sum+1

加一减一是为了去掉 4%4=0 这种情况

然后下次迭代的时候由于当前位置被删除了,位置退一个

judge(k,sum-1,m,now-1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: