标签:java
/**
* 7-2
* 约瑟夫问题
* 编写程序由键盘接收一个N的值,从编号为1的人开始报数,
* 数到7的那个人出列
* 输出最后剩下的一个人的编号是多少*/
import java.util.*; public class Test { public static void main(String[] args) { System.out.println("从键盘输入一个N的值"); Scanner input = new Scanner(System.in); int num = input.nextInt(); Node[] array = new Node[num+1]; //声明N+1个节点 //初始化节点 for (int i = 1; i < num; i++) array[i] = new Node(1, i+1); //设定最后节点指向第一个节点 array[num] = new Node(1, 1); //游戏从指向第一个人的节点开始 int k = num; for (int i = 0; i < num-1; i++) //不断循环,直到只剩最后一个人 { for (int j = 0; ;) { if (j < 7) //数到第7个人 { k = array[k].readNext(); j += array[k].readData(); } else break; } array[k].setData(0); } //输入最后剩下的人 for (int i = 1; i < num+1; i++) if (array[i].readData() == 1) System.out.print(" " + i + " "); } } class Node { private int m_Data; private int m_Next; //构造函数 Node (int data, int next) { m_Data = data; m_Next = next; } //设定节点的数据值 void setData (int data) { m_Data = data; } //读取节点的数据值 int readData () { return m_Data; } //设定节点的指向 void setNext (int next) { m_Next = next; } //读取节点的指向 int readNext () { return m_Next; } }
标签:java
原文地址:http://anglecode.blog.51cto.com/5628271/1619866