首页 > 试题广场 >

约瑟夫环

[编程题]约瑟夫环
  • 热度指数:1415 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

编号为0到n-1的n个人围成一圈。从编号为0的人开始报数1,依次下去,报到m的人离开,问最后留下的一个人,编号是多少?


输入描述:
输入一行两个整数n和m。


输出描述:
输出最后一个留下来的人的编号。
示例1

输入

8 3

输出

6
import java.util.Scanner;
public class Main{
	public static void main(String[] args)
	{
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		int k = cin.nextInt();
		ListNode head = null;
		ListNode curr = null;
		ListNode help = null; //
		for (int i = 0; i < n; i++) {
			ListNode listNode = new ListNode(i);
			if (i == 0) {
				head = listNode;
				head.next = head;
				curr = head;
			} else {
				curr.next = listNode;
				listNode.next = head;
				curr = listNode;
			}
			if (i == n - 1) {
				help = curr;
			}
		}
		while (head != help) {
			for (int i = 0; i < k - 1; i++) {
				head = head.next;
				help = help.next;
			}
			head = head.next;
			help.next = head;
		}
		System.out.println(head.n);
	}

}

class ListNode
{
	int n;
	ListNode next;

	public ListNode(int i)
	{
		this.n = i;
	}
}

发表于 2020-07-24 21:08:04 回复(0)