-
题目描述:
-
生成一个长度为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);
}
}
}