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导致的,如何在不改变原代码,增添其他条件的情况下使该程序正常运行? 展开
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导致的,如何在不改变原代码,增添其他条件的情况下使该程序正常运行? 展开
展开全部
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 里面这么写 就行了!!
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 里面这么写 就行了!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好 加个判断行不行 下标超过19 就置为0:
while(s<k){
if(j>=19){
j=0;
}else{
j=(j+1);
}
s+=data[j];
}
while(s<k){
if(j>=19){
j=0;
}else{
j=(j+1);
}
s+=data[j];
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是第一个报5的人出列之后。重新开始从0计数。以此类推,但凡报5者都出列。直到所有的人出来为止啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询