题目描述:20个人围成一圈,轮流报数1,2,3,报到3的人踢出局,求最后剩余的一个人的序号为多少;
思路分析:典型的约瑟夫环问题;
代码分析:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec(20,0);//创建20个数据的容器,并全部置为0
int count = 0;//死亡顺序计数器
int i=0,j=0;
while(1)//循环遍历
{
if(vec[i] == 0)//可以喊数
{
++j;
if(j == 3)//喊到关键字
{
vec[i] = 1;//退出游戏
j = 0;//关键字归位
count ++;//计数器加1
}
if(count == 20)//找到最后一个了
{
cout<<i+1<<endl;//输出
break;//退出
}
}
if(i == 19)//遍历到最后一个了
{
i = 0;//i归位置
}else
{
++i;
}
}
return 0;
}