题目描述如下:有30个 编号为1到30 的员工拍成一对,从第一个人开始报数,依次的递增,报到9的人被淘汰,然后后面的人继续开始从1报数,反复循环,求被淘汰的人有哪些编号。
思路
建立一个没有被淘汰的员工编号列表,里面放的1到30 为员工的编号,采取以下的两个过程:
1、删除掉该列表的第九个元素
2、重整列表,讲被删掉的后面所有的成员和被删掉之前的成员反转构成新的成员列表
3、记录下成员列表的个数
当列表成员的个数减少到15时结束循环
代码
python
people_demo = list(range(1,31));
print(people_demo)
def converse_a_list(List):
return List[8:]+List[0:8];
List = list(range(1,31))
while(len(List) >15):
a = List.pop(8);
print(a);
List = converse_a_list(List);
CPP
#include<iostream>
#include<deque>
#include<string>
using namespace std;
void convert_deque(deque<int>&a)
{
for (int i = 0; i < 8; i++)
{
int temp = a.front();
a.pop_front();
a.push_back(temp);
}
cout << a.front()<< endl;
a.pop_front();
}
void Print_deque(const deque<int>&a)
{
for (deque<int>::const_iterator it = a.begin(); it != a.end(); it++)
{
cout << *it<< endl;
}
}
int main()
{
deque<int>a;
for (int i = 1; i < 31; i++)
{
a.push_back(i);
}
while (a.size() > 15)
{
convert_deque(a);
}
//Print_deque(a);
system("pause");
}
结果
最后输出的员工编号为: