
java约瑟夫环问题,结果总是不对,求大神相助
17个人围成一个圈子,人的编号从0开始到16,从1报数,凡是报到3或3的倍数的人都离开圈子,然后继续,问最后一个人的编号是多少我的代码:publicclassJoseph...
17个人围成一个圈子,人的编号从0开始到16,从1报数,凡是报到3或3的倍数的人都离开圈子,然后继续,问最后一个人的编号是多少
我的代码:
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是当前人的编号,j用于计算谁数到了3的倍数,k为出局人数
i=i%17; //使i始终保持在0-16之间
if(a[i]!=-1){
j++;
}
if(j%3==0){
a[i]=-1; //被赋值为-1即出局
k++;
}
}
System.out.println(i);
}
}
结果本应该是10,但是我的输出16,看了好长时间都不知道哪错了
求大神指点。。。 展开
我的代码:
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是当前人的编号,j用于计算谁数到了3的倍数,k为出局人数
i=i%17; //使i始终保持在0-16之间
if(a[i]!=-1){
j++;
}
if(j%3==0){
a[i]=-1; //被赋值为-1即出局
k++;
}
}
System.out.println(i);
}
}
结果本应该是10,但是我的输出16,看了好长时间都不知道哪错了
求大神指点。。。 展开
2个回答
展开全部
你的思路没错,但需要改变一点,就直观了,代码如下
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++之后的
}
}
:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |