报数游戏

标题:报数游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?
def func(M):
    _list = []
    for i in range(1, 101):
        _list.append(i)
    i=0
    n=100
    count=1
    while n > M-1:
        m=0
        for i in range(0,n):
            if count%M!=0:
                _list[m]=_list[i]
                m+=1
            count+=1
        n=m
    res=_list[:M-1]
    res.sort()
    return res
M = int(input())
if M<=1 or M>=100:
    print("ERROR!")
else:
    print(",".join([ str(i) for i in func(M)]))


import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import com.sun.org.apache.bcel.internal.generic.INEG;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        int num = Integer.valueOf(scanner.nextLine());
        if (num>=100||num<1){
            System.out.println("ERROR!");
            return;
        }
        List<Integer> nums = new ArrayList<>();
        for (int i =1;i<=100;i++){
            nums.add(i);
        }
        int han = 1;
        int numNow=0;
        while (nums.size()>=num){
            if (numNow==nums.size()){
                numNow=0;

            }
            if (han==num){
                han=1;
                nums.remove(numNow);
                continue;
            }
            numNow++;
            han++;

        }
        StringBuilder sb = new StringBuilder();
        for (int nn:nums){
            sb.append(nn).append(",");
        }
        if (sb.length()!=0){
            sb.setLength(sb.length()-1);
        }

        System.out.println(sb.toString());
    }
}
全部评论

相关推荐

zxxxxxr:不是挂了,是美团招聘特有机制,三天第一志愿没处理会自动结束跳转到第二志愿,以此类推,只要有人后面捞也会回到第一志愿的
投递美团等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务