Java约瑟夫环问题

约瑟夫环问题:已知编号为1,2,....,n的n个人围坐一张圆桌,从第一个人开始报数,数到k的那个人出列;再从他的下一个人开始数,数到K的那个人又出列;依次重复下去,知道... 约瑟夫环问题:已知编号为1,2,....,n的n个人围坐一张圆桌,从第一个人开始报数,数到k的那个人出列;再从他的下一个人开始数,数到K的那个人又出列;依次重复下去,知道所有的人全部出列。编程输出出列的次序,n=20,k=5.
class Josephus{
public static void main(String[]args){
int[]data = new int[20];
for(int i=0;i<data.length;i++){
data[i]=1;
}
int k=5;
int j=-1;
for(int i=0;i<data.length;i++){
int s=0;
while(s<k){
j=(j+1);
s+=data[j];
}
data[j]=0;
System.out.print(" "+(j+1));
}
}
}

这段代码运行后出现数据溢出,应该是j=(j+1),当j=20时,j+1=21导致的,如何在不改变原代码,增添其他条件的情况下使该程序正常运行?
展开
 我来答
伍陈Eabe
2012-11-14 · TA获得超过255个赞
知道答主
回答量:31
采纳率:0%
帮助的人:13.5万
展开全部
while (s < k) {
if((data.length-1)==j){
j = (j + 1);
s += data[j-1];
}else if(j<(data.length-1)){
j = (j + 1);
s += data[j];
}
}

While 里面这么写 就行了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
csyangshungang
2012-11-14 · TA获得超过518个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:332万
展开全部
你好 加个判断行不行 下标超过19 就置为0:
while(s<k){
if(j>=19){
j=0;
}else{
j=(j+1);
}
s+=data[j];
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
周游测试类
2012-11-16
知道答主
回答量:28
采纳率:0%
帮助的人:9.9万
展开全部
是不是第一个报5的人出列之后。重新开始从0计数。以此类推,但凡报5者都出列。直到所有的人出来为止啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式