题目描述
输入一个整数num
, 30
个人在一条船上,超载,需要 15
人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1
开始,数到 num
的人下船。如此循环,直到船上仅剩 15
人为止,问都有哪些编号的人下船了呢?输出下船人的数组。
输入格式
一个整数。
输出格式
一个数组。
输入输出样例
输入1
8
输出1
[8, 16, 24, 2, 11, 20, 29, 9, 19, 30, 12, 23, 5, 18, 3]
说明/提示
30
个人在一条船上,超载,需要 15
人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1
开始,数到9
的人下船。
如此循环,直到船上仅剩 15
人为止。
#include <iostream>
#include <vector>
using namespace std;
vector<int> findPeopleToLeave(int num) {
vector<int> people(30);
for (int i = 0; i < 30; i++) {
people[i] = i + 1; // 初始化30个人的编号
}
vector<int> result;
int index = 0;
while (result.size() < 15) {
int count = 0;
while (count < num) {
if (people[index] != 0) {
count++;
}
if (count == num) {
result.push_back(people[index]); //将需要下船的人的编号加入数组
people[index] = 0; //标记该人已下船
}
index = (index + 1) % 30; //遍历循环30个人
}
}
return result;
}
int main() {
int num;
cin >> num;
vector<int> result = findPeopleToLeave(num);
cout << "[";
for (int i = 0; i < result.size(); i++) {
cout << result[i];
if (i < result.size() - 1) {
cout << ", ";
}
}
cout << "]" << endl;
return 0;
}