题目描述
某天猿辅导 HR 组织大家去漂流,早上,参加团建的同学都到齐了,并且按到达公司的先后顺序排好队了。 由于员工太多,一个大巴车坐不下,需要分多个车,车是足够的,但所有人需要按一定顺序上车,按如下规则安排上车的顺序:
假设大巴车容量为 m,从队首开始,每 m 个人分成一个小组,每个小组坐一辆车。同时只有一个车打开车门供员工上车。 小组之间按从队尾到队首顺序依次上车,同一小组内先到的同学先上,求所有人上车的顺序。
例如: 员工数 8, 车容量 3, 员工到达顺序为 1 2 3 4 5 6 7 8, 3个人一个小组,分三个小组, 小组一: 1, 2, 3, 小组二: 4, 5, 6,小组三: 7,8。 小组上车顺序为: 小组三,小组二,小组一 。 所有员工上车顺序为 7 8 4 5 6 1 2 3
#include <iostream>
int main() {
int memberCount, carCount;
std::cin >> memberCount;
std::cin >> carCount;
int i = 0;
int* members = new int[memberCount];
for (i = 0; i < memberCount; i++) {
std::cin >> members[i];
}
int* orders = new int[memberCount];
// TODO: 按规则调整顺序
//最后一组有eNum人
int eNum = memberCount%carCount;
//共有num或者num+1个组
int num = memberCount/carCount;
int k = 0;
int j;
for(i = 1; i <= num; i++){
j = memberCount-i*carCount;
for(int m = 0; m < carCount; m++){
orders[j] = members[k];
k++;
j++;
}
}
for(j = 0; j < eNum; j++){
orders[j] = members[k];
k++;
}
i = 0;
while(i < memberCount)
{
// TODO: 输出,注意有空格隔开
//之前这里写成了std::cout << orders[i] + " ";
//结果发生了段错误,找了半天才发现,唉!
//写习惯JavaScript了,习惯用+连接输出的字符,一时改不过来,心累
std::cout << orders[i] << " ";
i++;
}
delete[] members;
delete[] orders;
}