圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
2 3 2 4
GBBG BGGB
先将所有人放在vector容器中,遇到坏人让其出去,直到满足题意#include<iostream> #include<vector> #include<cstring> using namespace std; int a[70000],n,m,cnt; vector<int> v; int main() { while(cin>>n>>m) { v.clear(); cnt=0; memset(a,0,sizeof(a)); for(int i=1;i<=2*n;i++) v.push_back(i); while(v.size()>n) { cnt=(cnt+m-1)%v.size(); v.erase(v.begin()+cnt); } vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) a[*it]=1; for(int i=1;i<=2*n;i++) { if ((i-1)%50==0&&i>1) cout<<endl; if (a[i]) cout<<"G"; else cout<<"B"; } cout<<endl; cout<<endl; } return 0; }
1419

被折叠的 条评论
为什么被折叠?



