カスタムジョセフリング


ヨセフ環(Josephus)問題:古代のある裁判官はn人の犯人の死刑を判決した.彼はでたらめな法律を持っていて、犯人を丸くして、s人から数え始め、d人目の犯人を数えるたびに、引き出して処刑し、それからd人を数え、数えた人を処刑した.残りの最後の赦免ができるまで.
public class Josephus {
	private static class Node {
		public int no;//  
		public Node next;//  

		public Node(int no) {
			this.no = no;
		}
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print(" :");
		int totalNum = scanner.nextInt();
		System.out.print(" :");
		int cycleNum = scanner.nextInt();
		Node header = new Node(1);
		Node pointer = header;
		System.out.println("header==pointer?"+(header==pointer));
		System.out.println("header.equals(pointer)?"+(header.equals(pointer)));
		for (int i = 2; i <= totalNum; i++) {
			pointer.next = new Node(i);
			pointer = pointer.next;
		}
		pointer.next = header;
		//  
		System.out.println(" :");
		while (pointer != pointer.next) {
			for (int i = 1; i < cycleNum; i++) {
				pointer = pointer.next;
			}
			System.out.println(pointer.next.no);
			pointer.next = pointer.next.next;
		}
		System.out.println(pointer.next.no);
	}
}