问题描述:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
凡报到3的人退出圈子,问最后留下的是原来的第几号?
输入:2 输出:2
#include "stdafx.h"
#include "iostream"
#include "vector" //顺序容器
using namespace std;
void LastOne(int N)
{
int i,j=0,count=0,n;
n=N;
vector< vector<int> > a;
vector<int> b,c;
for(i=0;i<N;i++)
{
b.push_back(i+1);//编号
c.push_back(1);//在队列里的标志
}
a.push_back (b);
a.push_back (c);
while(n>1)
{
i=j;
if(j==N) {j=0;continue;}//实现循环报数
if(a[1][i]==0) { j++;continue;}
else
{
count++; //报数
if(count==3)
{
a[1][i]=0;//退出
n--;//记录剩余人数
count=0;
}
}
j++;
}
for(i=0;i<N;i++)
if(a[1][i]==1)
cout<<a[0][i]<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int N,i;
cin>>N;
LastOne(N);
system("pause");
return 0;
}