码迷,mamicode.com
首页 > 编程语言 > 详细

那些年,一起学的Java 7-2

时间:2015-03-13 01:55:46      阅读:139      评论:0      收藏:0      [点我收藏+]

标签: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 7-2

标签:java

原文地址:http://anglecode.blog.51cto.com/5628271/1619866

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!