当前位置: 首页 > news >正文

NC2227_约瑟夫环

题解:

import java.util.Scanner;
 ​
 public class Main {
     public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         int n = sc.nextInt();
         int k = sc.nextInt();
         int m = sc.nextInt();
         int set = 0;
         for(int i = 2;i <= n;i ++){
             set = (set + m) % i;
         }
         System.out.println((set + k)%n);
     }
 }

解题思路:

n:总人数

k:开始报数的人的编号

m:每次数到m的人出队

set:记录每次循环后剩余人的位置偏移量

位置偏移量的概念:在每一轮报数结束后,由于有人出队,剩下的人的位置会发生变化。位置偏移量表示的是由于出队操作导致最后一个人位置变化的量。这个量在每一轮中累加,并用于计算下一轮结束后最后一个人的新位置。

  1. 初始化:首先创建一个Scanner对象来读取输入的值,包括总人数n、起始编号k和报数的最大值m

  2. 计算过程

    • 使用一个变量set来记录每轮报数后剩余人的位置偏移量。

    • 从第二个人开始(即i=2),逐个计算到第n个人。

    • 在每一轮中,更新set的值为(set + m) % i。这个公式的含义是:上一轮结束时的位置加上本轮需要报数的次数m,然后对当前剩余的人数i取模,得到新的位置偏移量。

  3. 输出结果

    • 最后,通过(set + k ) % n计算出大王的编号。这里(set + k )是将0-based索引转换为1-based索引,然后对n取模确保结果在合法范围内,最后加1是因为Java中的数组是从0开始的,而题目要求的是从1开始的编号。

相关文章:

  • 代码随想录算法训练营第三十天 | 卡码网46.携带研究材料(二维解法)、卡码网46.携带研究材料(滚动数组)、LeetCode416.分割等和子集
  • Kubernetes Service服务发现dns之CoreDNS
  • 快速排序算法详解
  • 赛博算命之“八字排盘“的JAVA实现
  • 128陷阱
  • uniapp-原生android插件开发摘要
  • Android Studio安装与配置详解
  • 软件工程-软件测试
  • fortify安全扫描Access Control: Database问题解决
  • Java 8 到 Java 17 主要新特性
  • 高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数
  • 私有化部署大模型推理性能分析
  • SQL的select语句完整的执行顺序
  • 【Java基础】Java 中的接口
  • 云服务培训六-云上安全与管理
  • 虚拟机Linux操作(持续更新ing)
  • Spring拦截器与DispatcherServlet
  • 鸿蒙通过用户首选项实现数据持久化
  • 【ISP】AF自动对焦
  • 【3天快速入门WPF】13-MVVM进阶
  • 泰安人才网首页/常州seo
  • wordpress排版教程/抖音seo优化怎么做
  • 成都现在的疫情情况怎么样/网站seo如何做好优化