基础题,暴力搜索即可,详细见注释。
#include <iostream>
using namespace std;
const int MAXM = 5005;
struct soldier //士兵
{
int num; //最初编号
}s[MAXM];
int main()
{
int N;
cin >> N;
while (N--)
{
int M;
cin >> M;
for (int i = 1; i <= M; i++) //存储原始编号
{
s[i].num = i;
}
int total = M; //队伍中剩余人数
int interval = 2; //报数间隔
int now = 0; //当前报数
while (total > 3)
{
for (int i = 1; i <= M; i++) //按照间隔出列
{
if (s[i].num != 0) //士兵未出列
++now;
if (now == interval)
{
s[i].num = 0; //士兵出列
now = 0;
}
}
now = 0;
total = 0;
for (int i = 1; i <= M; i++) //计算剩余人数
{
if (s[i].num != 0)
++total;
}
if (interval == 2) //更改报数间隔
interval = 3;
else
interval = 2;
}
int temp = 1; //当前输出人数
for (int i = 1; i <= M; i++)
{
if (s[i].num != 0)
{
if (temp < total)
{
cout << s[i].num << " ";
++temp;
}
else
cout << s[i].num << endl;
}
}
}
return 0;
}
继续加油。