java 约瑟夫环问题 数据结构

输入人数,每个人有一个密码,比如说从第一个开始,他的密码是3,则报到第3个人,第三个人出来,第三个人的密码是2,则继续报到第5个人,第五个人出来。。。这程序怎么不对啊??... 输入人数,每个人有一个密码,比如说从第一个开始,他的密码是3,则报到第3个人,第三个人出来,第三个人的密码是2,则继续报到第5个人,第五个人出来
。。。
这程序怎么不对啊???

import java.util.Scanner;

public class Josephus {
private static class Node {
public int no;// 编号
public int password;//密码
public Node next;// 下一个节点

public Node(int no) {
this.no = no;

}
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int totalNum = scanner.nextInt(); //输入人数
for(int i=1;i<=totalNum;i++){
System.out.println("请输入第个"+i+"人的密码:");
new Node(i).password = scanner.nextInt();
}//输入每个人的密码

Node header = new Node(1);
Node pointer = header;
for (int i = 2; i <= totalNum; i++) {
pointer.next = new Node(i);
pointer = pointer.next;
}
pointer.next = header;
// 初始化环形链表结束
System.out.println("以下是出列的顺序:");
while (pointer != pointer.next){
int a = 0;
for (int i=1; i<=totalNum; i++){
a=new Node(i).password;
for (int j=1;j<a;j++){
pointer = pointer.next;
}
}
System.out.println(pointer.next.no);
pointer.next = pointer.next.next;
}
System.out.println(pointer.next.no);
}
}
展开
 我来答
52XiangXiang
2011-12-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
这个问题没那么简单,我分析了一下
1.出列的人,你没有删掉,虽然你输出了,但是却还在数组里面
2.假如有一个人被删除了,那么他的密码就无效了,这个需要考虑
3.还要考虑这是一个圈,也就是说,到了最后一个人,就要循环从头开始算

具体你写的不是数据结构相关的,看起来像,实际使用用普通算法而已
追问
谢谢 我们学链表的时候的作业 就是说只是要求用链表实现这个过程 如果说只是实现这个过程 我还要怎么改改啊? 先把过程实现了,以后更好的算法还要向您请教。
追答
我们JAVA课本中有关于线性表和约瑟夫的实例的,一般的书上都有,你利用那个线性表去做算法就容易了,至于用普通的算法就没什么必要了,把简单问题复杂化不是好事,你会出栈入栈的话,就能自己编出来,自己先试试比较好,我也是学生!!
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式