问题描述:(约瑟夫环)

样例输入:

代码如下:使用链表模拟法
import java.util.Scanner; public class FindTheWinner { //找出游戏的获胜者 //1 <= k <=
n <= 500 class Node{ int data; Node next; public Node(int data) { this.data =
data; } } public int findTheWinner(int n, int k) {//利用循环列表来解决 if (k==1) return n
; Node first=new Node(1); Node p=first; for (int i = 2; i <=n ; i++) { p.next=
new Node(i); p=p.next; } p.next=first;//首尾相连 Node p1=first; Node pre=null; int
cnt=1; while (p1!=pre){ pre=p1; p1=p1.next; cnt++; if (cnt==k){ pre.next=p1.next
;//删除p1所指的节点 cnt=1; p1=pre.next;//将p1指向下一个节点 } } return p1.data; } public static
void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner
.nextInt(); int k=scanner.nextInt(); FindTheWinner findTheWinner=new
FindTheWinner(); System.out.println(findTheWinner.findTheWinner(n,k)); } }
运行结果如下:

技术
©2019-2020 Toolsou All rights reserved,
在算法研究过程中如何进行算法创新七大排序算法(java代码)MYSQL中的索引与事务———javaweb(8)(面试必考)2022蓝桥杯JavaB组省赛试题网络安全-wifi攻防网络层协议——ICMP协议MySQL查询表中指定条件下的最新记录JavaSE笔记(一)Java基础语法mysql 查询条件之外的数据_mysql 查询符合条件的数据qt使用数据库sqlite