您的位置:首页 > 其它

题目1189:还是约瑟夫环

2014-03-03 21:13 302 查看
题目描述:

生成一个长度为21的数组,依次存入1到21;

建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每个结点中;

将上述链表变为单向封闭(循环)链表;从头结点开始数,将第17个结点删除,将它的下一个结点作为新的头结点;

重复上述过程,直到该链表中只剩一个结点,显示该结点中存入的数字。
输入:

没有任何输入数据。
输出:

输出上面题目描述中最后剩下的节点中存入的数字。
样例输入:

样例输出:

提示:

请不要直接输出数据水过去,这样达不到提升自己的目的,

请按照题目要求来做题,这样到真正考试时才能应对自如。
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;

class Main
{
public static final boolean DEBUG = false;

public static void main(String[] args) throws IOException
{
Scanner cin;
int n, p;

if (DEBUG) {
cin = new Scanner(new FileReader("d:\\OJ\\uva_in.txt"));
} else {
cin = new Scanner(new InputStreamReader(System.in));
}

n = 21;
p = 17;

Queue<Integer> q = new LinkedList<Integer>();
for (int i = 1; i <= n; i++)
q.add(i);

int i = 0;
while (!q.isEmpty()) {
if (q.size() == 1) {
System.out.println(q.peek());
break;
}
int tmp = q.poll();
i++;
if (i == p) {
i = 0;
} else
q.add(tmp);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: