队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)

题目要求

P1996题目链接

在这里插入图片描述

分析

以前就研究过“约瑟夫环”问题:
《单循环链表求解约瑟夫环问题(Java语言描述)》
《杀人游戏~约瑟夫环(洛谷P1145题题解)》

这里,我们使用队列解决问题这个问题。
每个报数人,看他报的数:

  • 如果就是要求的数值,他出局;
  • 否则,他被移动到队尾。

嗯,一个尝试。

AC代码(Java语言描述)

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        StringBuilder result = new StringBuilder();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt(), key = scanner.nextInt();
        scanner.close();
        for (int i = 1; i <= num; i++) {
            queue.offer(i);
        }
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j < key; j++) {
                queue.offer(queue.poll());
            }
            result.append(queue.poll()).append(" ");
        }
        System.out.println(result.toString().trim());
    }
}
发布了680 篇原创文章 · 获赞 1418 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104813199
今日推荐