当前位置: 首页 > 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开始的编号。

http://www.dtcms.com/a/46714.html

相关文章:

  • 代码随想录算法训练营第三十天 | 卡码网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进阶
  • 基于zookeeper搭建kafka集群
  • API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南
  • 企业数据中台建设思路
  • 【Spring】Spring事务管理
  • AUTOSAR简介
  • 动态内存池设计与环形缓冲区实现详解
  • 深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)
  • ASP4644四通道降压稳压器的抗辐照特性与应用验证
  • Linux线程同步与互斥应用/生产者消费者模型
  • Leetcode-1776. Car Fleet II [C++][Java]