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));
    }
  }
}



目录
相关文章
|
2月前
|
机器学习/深度学习 算法
m基于深度学习的64QAM调制解调系统频偏估计和补偿算法matlab仿真
### 算法仿真结果 展示5张图像,描绘了基于深度学习的频偏估计和补偿在MATLAB 2022a中的仿真效果。 ### 理论概要 - 深度学习算法用于建立信号与频偏的非线性映射,无需导频,节省资源。 - 网络模型(如CNN或RNN)处理IQ数据,提取特征,简化估计补偿过程,降低复杂度。 - 64QAM系统中,通过神经网络实现精确频偏感知,增强通信性能。 ### MATLAB核心程序 - 代码生成64QAM信号,模拟不同SNR和频偏条件,使用深度学习进行相位估计和补偿。 - 仿真比较了有无补偿的误码率,显示补偿能显著改善通信质量。 ```
33 1
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
26天前
|
机器学习/深度学习 算法
【MATLAB】GA_BP神经网络时序预测算法
【MATLAB】GA_BP神经网络时序预测算法
35 8
|
1月前
|
机器学习/深度学习 算法 Serverless
【MATLAB】PSO_BP神经网络回归预测算法(适用光伏发电回归预测等)
【MATLAB】PSO_BP神经网络回归预测算法(适用光伏发电回归预测等)
30 1
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
1天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
|
2天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
2天前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
10 0
|
3天前
|
数据采集 机器学习/深度学习 存储
MATLAB用改进K-Means(K-均值)聚类算法数据挖掘高校学生的期末考试成绩
MATLAB用改进K-Means(K-均值)聚类算法数据挖掘高校学生的期末考试成绩