华为OD机试真题-报数游戏

题目描述

100 个人围成一圈,每个人有一个编码,编号从1开始到100。

他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M

请问最后剩余的人在原先的编号为多少?

输入描述

输入一个整数参数 M

输出描述

如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;

否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号 字符串Q

示例1

输入

3

输出

58.91

说明

输入M为3,最后剩下两个人。

示例2

输入

4

输出

34.45.97

说明

输入M为4,最后剩下三个人。

题解

约瑟夫环问题

源码 java

public class Main {
	static Input input;
	static  {
		input = new Input("3");
	}

	public static void main(String[] args) {
		int M = Integer.parseInt(input.nextLine());
		if (M <= 1 || M >= 100) {
			System.out.println("ERROR");
			return;
		}
      	// 初始化一个圆圈队列
		List<String> list = new ArrayList<>();
		for (int i = 1; i <= 100; i++) {
			list.add(i+"");
		}
		int index = M-1;
		// 剩余人数只要大于等于 M 就说明有需要淘汰的人
		while (list.size() >= M) {
			System.out.print(list.remove(index)+",");
			index = index + M -1;
			if (index >= list.size()) {
				index %= list.size();
			}

		}
		System.out.println();
		System.out.println(String.join(",", list));
	}
}
#我的岗位说明书##运营每日一题#
全部评论
这题算简单吧
点赞 回复 分享
发布于 2024-11-01 11:50 浙江
投的是开发岗?
点赞 回复 分享
发布于 2024-10-28 09:43 北京

相关推荐

不愿透露姓名的神秘牛友
07-08 11:16
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务