请教这个算法该怎样写(报数出队)?

rwxzqd 2004-04-18 08:24:36
设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;让后从出局的下一个人重新开始报数,数到第m个人,再让他出局,......,如此反复直到所有的人全部出局为止,以n=9,s=1,m=5为例,列出n个人的出局列序。
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwxzqd 2004-04-20
  • 打赏
  • 举报
回复
谢谢大家!!!
FireElement 2004-04-18
  • 打赏
  • 举报
回复
我写了个程序,编译过了,没问题。
public class Eliminate{
private int length;
private int start;
private int interval;
private int kickout;
private int[] point;

Eliminate(int length,int start,int interval){
this.length = length;
this.start = start;
this.interval = interval;
kickout = 0;
point = new int[length];

for(int i =0;i < length - 1;i++){
point[i] = i+1;
}
point[length - 1] = 0;
}

public void kickMembers(){
int outnum = 0;
while(kickout < length){
for(int i = 0;i < interval - 2;i++){
start = point[start];
}
outnum = point[start];
point[start] = point[outnum];
start = point[outnum];
kickout++;
System.out.print(outnum + " ");
}
}

public static void main(String[] args){
Eliminate e = new Eliminate(11,2,3);
System.out.println("出局顺序:");
e.kickMembers();
System.out.println();
}
}
panpan221 2004-04-18
  • 打赏
  • 举报
回复
新手学习
ai92 2004-04-18
  • 打赏
  • 举报
回复
int[] =allman;//定义一个数组
String out;定义字符串存放出局人员
数组初始化.把数据放入
int n=allman.length;
int s,m;
int flag;
附值;
if((s-1)>n)
s=s%n;
while(n>0)
{
if((s+m-1)>n)//如果第m个人已经超过了数组长度
flag=(s+m-2)%n
else
flag=s+m-2;
out+=" ";
out+=allman[flag];
for(int i=flag;i<n-1;i++)//去掉出局的人
allman[i]=allman[i+1];
--n;
s=flag;

}
这个应该就可以
可能有些细节没想到,你自己加上吧.
Danger2000 2004-04-18
  • 打赏
  • 举报
回复
这个好像是josephus问题,我用链表写了一个:
public static int josephus(int all, int passes) {
List theList = new LinkedList();
for(int i=1;i<all+1;i++)
theList.add(new Integer(i));

Iterator it = theList.iterator();
while( theList.size()!=1 ) {
Integer temp = new Integer(0);
for(int i=1;i<=passes;i++) {
if(!it.hasNext())
it = theList.iterator();


Integer k = (Integer)it.next();
if(i==passes) {
temp = k;
}
}
it.remove();
System.out.println(temp.intValue() + " out.");
}

it = theList.iterator();
return ((Integer)it.next()).intValue();
}

调用如下:
System.out.println("final one: " + josephus(9, 5));

结果如下:
5 out.
1 out.
7 out.
4 out.
3 out.
6 out.
9 out.
2 out.
final one: 8

如果想从某个人开始,可以自行修改theList的结构。



62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧