java约瑟夫环问题,结果总是不对,求大神相助

2025-02-24 11:21:34
推荐回答(2个)
回答1:

你的思路没错,但需要改变一点,就直观了,代码如下

public class JosephRing {
 public static void main(String[] args) {
  int []a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  int i,j,k;
  for(i=0,j=0,k=0;k<=16;i++){
   i=i%17;      
   if(a[i]!=-1){
    j++;
    }   
   if(j%3==0 && a[i]!=-1){//改了这里
    System.out.println("第"+(k+1)+"个离开的人编号为:"+a[i]);
    a[i]=-1;
    k++;
    }  
   }  
  System.out.println(i);//这个i其实是做了i++之后的
  }
 }

 

回答2:

把k<=16改为k<16
应该到16次就找到了
多算了1次