/**
* 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;
}
}
















