跟小白一起学一下吧!
/*
hdu_圆桌问题
一张圆桌,围坐由2n个人,其中有n个好人n个坏人,
现在,第一个人从1开始报数,数到m时,就把这个人赶走,然后再从m后面的人从1重新报数 ,
问:应该如何安排着2n个人的座次,才能使得n个坏人全被赶走,n个好人全部留下?
输入:多组数据,每组数据:n,m<32767;
输出:对于每组数据,"G"表示好人,"B"表示坏人,50个字母为一行,无空白字符,相邻数据之间留有空行;
输入样例:
2 3
2 4
输出样例:
GBBG
BGGB
*/
//代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>table; //模拟圆桌
int n,m;
while(cin>>n>>m){
table.clear();
for(int i=0;i<2*n;i++) table.push_back(i); //初始化
int position=0; //记录当前位置
for(int i=0;i<n;i++){ //赶走第n个人
position=(position+m-1)%table.size(); //以为圆桌是一个环,故取余
table.erase(table.begin()+position); //赶走坏人后,table人数减一
}
int j=0;
for(int i=0;i<2*n;i++){ //打印预先安排的座位
if(!(i%50)&&i)cout<<endl; //规定50个字母一行
if(j<table.size()&&i==table[j]){ //table留下来的都是好人
cout<<"G";
j++;
}
else{
cout<<"B";
}
}
cout<<endl<<endl; //留一个空行
}
return 0;
}
小小白很白,但是还在努力哦~