HDU 4841圆桌问题
题目链接
这里考的是约瑟夫问题,我们可以用vector实现
#include<iostream>
#include<vector>
using namespace std;
int sum;
int main()
{
vector<int> p;
int n,m;
while(cin>>n>>m)
{
p.clear();
//由于每次输入都要更新数组
for(int i=0;i<2*n;i++)
p.push_back(i);
//将每个数按编号存入
int ans=0,k=0;
for(int i=0;i<n;i++)
{
ans=(ans+m-1)%p.size();
//注意这里p的长度一直在变,
//由于形成了一个闭环,因此我们采用取余
p.erase(p.begin()+ans);
}
for(int i=0;i<2*n;i++)
{
if(i%50==0&&i>0)
cout<<endl;
if(k<n&&i==p[k])
//坏人和好人都是n,当前的数字和p数组一致则为好人
{
cout<<"G";
k++;
}
else cout<<"B";
}
cout<<endl<<endl;
}
return 0;
}