首页 > 试题广场 >

报数

[编程题]报数
  • 热度指数:3116 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
今年7月份vivo迎来了新入职的大学生,现在需要为每个新同事分配一个工号。人力资源部同事小v设计了一个方法为每个人进行排序并分配最终的工号,具体规则是:
将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到队头继续报,直到所有人都出列;
最后按照出列顺序为每个人依次分配工号。请你使用自己擅长的编程语言帮助小v实现此方法。


输入描述:
输入2个正整数,空格分隔,第一个代表人数N,第二个代表M:


输出描述:
输出一个int数组,每个数据表示原来在队列中的位置用空格隔开,表示出列顺序:
示例1

输入

6 3

输出

3 6 4 2 5 1

说明

6个人排成一排,原始位置编号即为1-6。最终输出3 6 4 2 5 1表示的是原来编号为3的第一个出列,编号为1的最后一个出列。
好像没有js写的
function solution(n, m) {
    let v = new Array(n+1);
    let res = [];
    for(let i=0;i<n;i++){
        v[i] = i+1;
    }
    let j = 0;
    while(v.length>0){
        j += m-1;
        if(j>=v.length) j = j%v.length;
        res.push(v[j]);
        v.splice(j,1);
    }
    let result = '';
    for(let i=0;i<res.length;i++){
        result += res[i]+' ';
    }
    return result;
}
while (line = readline()) {
    var params = line.split(" ");
    var n = params[0];
    var m = params[1];
    print(solution(n, m));
}


发表于 2021-01-02 20:22:39 回复(0)