约瑟夫环c语言计蒜客链表,java实现蓝桥杯约瑟夫环

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

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

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

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

题目的输入是一行,2个空格分开的整数n, k

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

约定:0 < n,k < 1百万

例如输入:

10 3

程序应该输出:

4

每杀掉一个人,其实就是把这个数组向前移动了M位。然后逆过来,就可以得到这个递推式。

因为求出的结果是数组中的下标,最终的编号还要加1

import java.util.Scanner;

/***

* @Author: Mr.shen

* @Date: 2019/5/8 11:28

*/

public class 约瑟夫环 {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int n = in.nextInt(), k = in.nextInt();

int p = 0;

for (int i = 2; i <= n; i++) {

p = (p + k) % i;

}

System.out.println(p + 1);

}

详细的可以看另一篇文章约瑟夫斯问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值