1. 题目
读题
今年7月份迎来了新入职的大学生,现在需要为每个新同事分配一个工号。人力资源部同事小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的最后一个出列。
考查点
2. 解法
思路
代码逻辑
具体实现
public class CountOff {
public static void main(String[] args) {
System.out.println(Arrays.toString(count(6, 3)));
System.out.println(Arrays.toString(count(15, 3)));
}
public static int[] count(int m, int n) {
int seq = 0;
int[] people = new int[m];
int[] res = new int[m];
int cnt = 0;
while (seq < m) {
for (int i = 0; i < m; i++) {
if (people[i] == 0) {
cnt++;
if (cnt % n == 0) {
people[i] = 1;
res[seq++] = i + 1;
}
}
}
}
return res;
}
}
运行结果
[3, 6, 4, 2, 5, 1]
[3, 6, 9, 12, 15, 4, 8, 13, 2, 10, 1, 11, 7, 14, 5]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-07-18 mysql字符串函数详解
2022-07-18 mysql中的行转列,列转行
2021-07-18 IDEA git 切换分支注意事项