蓝桥杯0226-0303 约瑟夫环 java

题目描述

n个人的编号是1 ~n,如果他们依编号按顺时针排成一个圆圈,从编号是1的人开始顺时针报数。

(报数是从1报起)当报到K的时候,这个人就退出游戏圈。下一个人重新从1开始报数。

求最后剩下的人的编号。这就是著名的约瑟夫环问题。

本题目就是已知n,k的情况下,求最后剩下的人的编号。

输入描述:

输入是一行,2个空格分开的整数n, k (0 < n, k < 107)。

输出描述:

要求输出一个整数,表示最后剩下的人的编号。

输入输出样例

示例

输入

10 3

输出

4

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class YuesefuRound {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner in=new Scanner(System.in);
		int n,k;
		n=in.nextInt();
		k=in.nextInt();
		//System.out.println(n+k);
		List<Integer> list=new ArrayList<>();
		for(int i=1;i<=n;i++) {
			list.add(i);
		}
		int index=0;
//		index 表示当前索引
//		k 表示要移动的步数
//		首先将当前的索引值加上 k(要移动的步数),然后减去 1(因为索引通常是从 0 开始的)。
//		最后对列表的大小取余,确保结果在合法的索引范围内。
		while(list.size()>1) {
			index=(index+k-1)%list.size();
			list.remove(index);
		}
		System.out.println(list.get(0));
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值