N个人站圈报数算法问题

简介: 这是一道算法面试题

这是一道算法面试题

layout: post
title: N个人站圈报数算法问题
categories: Java语言核心
description: Java 网络编程技术
keywords: Java-basic, 算法

本系列文章在 https://github.com/freestylefly/javaStudy 持(jing)续(chang)更(duan)新(geng)中,欢迎有兴趣的童鞋们关注。

import java.util.Scanner;
public class Test1 {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int n;// 人数
    int m;// 报名数(报到的出列)
    System.out.print("请输入n:");
    n = input.nextInt();
    System.out.print("请输入m:");
    m = input.nextInt();
    int num = n;// 剩余人数
    int flag = 0;// 标记报名数,每报一次就加1
    int[] arr = new int[n];// 数组,刚开始所有数都为0,0代表存货,1代表删除该元素
    // 只要剩余人数大于等于1个人,就一直循环
    while (num >1) {
      for (int i = 0; i < n; i++) {
        if (arr[i] == 0) {
          flag++;
        }
        if (flag == m) {
          arr[i] = 1;
          System.out.println("第" + (i + 1) + "次出列:编号" + (i+1));
          flag=0;
          num--;
        }
      }
    }
    for (int i = 0; i < n; i++) {
      //最后编号为0代表存活的
      if(arr[i]==0) {
        System.out.println("最后剩下:" + (i+1));
      }
    }
  }
}

方式二:

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/**
 * 使用集合解决
 * @author Administrator
 *
 */
public class Test {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    // 人数
    int n;
    // 报名数(报到的出列)
    int m;
    //用来记录报名
    int count=0;
    System.out.print("请输入人数:");
    n = input.nextInt();
    System.out.print("请输入报到出列的数字:");
    m = input.nextInt();
    //集合放人和出列
    List<Integer> list = new LinkedList<Integer>();
    for (int i = 1; i <=n; i++) {
      list.add(i);
    }
    while(list.size()>1) {
      for (int i = 0; i <list.size(); i++) {
        count++;
        //如果报数到m就讲这个数从集合中移出
        if(count==m) {
          System.out.println("出列的是:"+list.remove(i));
          count=0;//重新开始报数
          i--;
        }
      }
    }
    //遍历集合看剩余谁
    for (int i = 0; i < list.size(); i++) {
      System.out.println("最后出列:"+list.get(i));
    }
  }
}



目录
相关文章
|
1天前
|
算法 数据安全/隐私保护
基于GA遗传优化算法的Okumura-Hata信道参数估计算法matlab仿真
在MATLAB 2022a中应用遗传算法进行无线通信优化,无水印仿真展示了算法性能。遗传算法源于Holland的理论,用于全局优化,常见于参数估计,如Okumura-Hata模型的传播损耗参数。该模型适用于150 MHz至1500 MHz的频段。算法流程包括选择、交叉、变异等步骤。MATLAB代码执行迭代,计算目标值,更新种群,并计算均方根误差(RMSE)以评估拟合质量。最终结果比较了优化前后的RMSE并显示了SNR估计值。
15 7
|
3天前
|
算法 数据挖掘
MATLAB数据分析、从算法到实现
MATLAB数据分析、从算法到实现
|
10天前
|
机器学习/深度学习 算法 调度
Matlab|基于改进鲸鱼优化算法的微网系统能量优化管理matlab-源码
基于改进鲸鱼优化算法的微网系统能量管理源码实现,结合LSTM预测可再生能源和负荷,优化微网运行成本与固定成本。方法应用于冷热电联供微网,结果显示经济成本平均降低4.03%,提高经济效益。代码包括数据分段、LSTM网络定义及训练,最终展示了一系列运行结果图表。
|
10天前
|
算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
15天前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
12天前
|
数据采集 存储 算法
基于BP算法的SAR成像matlab仿真
**摘要:** 基于BP算法的SAR成像研究,利用MATLAB2022a进行仿真。SAR系统借助相对运动合成大孔径,提供高分辨率图像。BP算法执行回波数据预处理、像素投影及图像重建,实现精确成像。优点是高精度和强适应性,缺点是计算量大、内存需求高。代码示例展示了回波生成、数据处理到插值显示的全过程。
|
19天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
44 8
|
21天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
13天前
|
算法 vr&ar
基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法
```markdown - MATLAB2022a中比较SG与RLS自适应波束成形算法。核心程序实现阵列信号处理,强化期望信号,抑制干扰。RLS以其高效计算权重,而SG则以简单和低计算复杂度著称。[12345] [6666666666] [777777] ```