华为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));
	}
}
#我的岗位说明书##运营每日一题#
全部评论
投的是开发岗?
点赞 回复 分享
发布于 10-28 09:43 北京
这题算简单吧
点赞 回复 分享
发布于 11-01 11:50 浙江

相关推荐

1 6 评论
分享
牛客网
牛客企业服务