#include <iostream>
#include <vector>
#define person_num 41
using namespace std;
typedef struct person
{
int old_num;//学生原来的编号
int num;//学生的报数
}person;
void fun()
{
vector<person> temp;
for (int i = 1;i <= person_num;++i)//对人进行编号
{
person tep;
tep.old_num = i;
tep.num = 0;
temp.push_back(tep);
}
bool flag = false;//队尾人是否出列
int fina_num = 0;//保留队尾人的报数
while (temp.size() != 2)
{
vector<person>::iterator it = temp.begin();
vector<person>::iterator it_end = temp.end();
--it_end;
int num = it_end->num;
if (flag == false)
{
num = it_end->num;
}
if (flag == true)
{
num = fina_num;
}
for (unsigned int i = 0;i < temp.size();++i)//1-3进行报数
{
if (num == 3)
{
num = 1;
it->num = num;
++it;
}
else
{
num = num + 1;
if (num == 4)
{
num = 1;
}
it->num = num;
++it;
}
}
for (it = temp.begin();it != temp.end();)//报到偶数的出列
{
if (it->num == 3)
{
vector<person>::iterator it_end = temp.end();
--it_end;
if (it == it_end)//如果要出列的是队尾的人,应将队尾人的报数记录下来
{
flag = true;
fina_num = it->num;
}
else
{
flag = false;
}
it = temp.erase(it);//迭代器失效问题
}
else
{
++it;
}
}
}
vector<person>::iterator it = temp.begin();
cout << it->old_num << endl;
++it;
cout << it->old_num << endl;
}
int main()
{
fun();
return 0;
}
#include <iostream>
#include <vector>
#define person_num 10
using namespace std;
typedef struct person
{
int old_num;//学生原来的编号
int num;//学生的报数
}person;
void fun()
{
vector<person> temp;
for (int i = 1;i <= person_num;++i)//对人进行编号
{
person tep;
tep.old_num = i;
tep.num = 0;
temp.push_back(tep);
}
bool flag = false;//队尾人是否出列
int fina_num = 0;//保留队尾人的报数
while (temp.size() != 1)
{
vector<person>::iterator it = temp.begin();
vector<person>::iterator it_end = temp.end();
--it_end;
int num = it_end->num;
if (flag == false)
{
num = it_end->num;
}
if (flag == true)
{
num = fina_num;
}
for (unsigned int i = 0;i < temp.size();++i)//1-10进行报数
{
if (num == person_num)
{
num = 1;
it->num = num;
++it;
}
else
{
num += 1;
it->num = num;
++it;
}
}
for (it = temp.begin();it!=temp.end() ;)//报到偶数的出列
{
if (it->num % 2 == 0)
{
vector<person>::iterator it_end = temp.end();
--it_end;
if (it == it_end)//如果要出列的是队尾的人,应将队尾人的报数记录下来
{
flag = true;
fina_num = it->num;
}
else
{
flag = false;
}
it=temp.erase(it);//迭代器失效问题
}
else
{
++it;
}
}
}
vector<person>::iterator it = temp.begin();
cout << temp.size() << endl;
cout << it->old_num << endl;
}
int main()
{
fun();
return 0;
}