lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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]



3. 总结

 
 
 
posted on 2023-07-18 20:30  白露~  阅读(11)  评论(0编辑  收藏  举报