今天天氣確實很好!
接下來是圓桌問題,順便做個vector容器的筆記方便以后復習,嘿嘿
Problem Description
圓桌上圍坐著2n個人,其中n個人是好人,另外n個人是壞人,如果從第一個人開始數數,數到第m個人,則立即處死該人;然后從被處死的人之后開始數數,再將數到的第m個人處死……依此方法不斷處死圍坐在圓桌上的人,試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之后,圓桌上圍坐的剩余的n個人全是好人,
Input
多組資料,每組資料輸入:好人和壞人的人數n(<=32767)、步長m(<=32767);
Output
對于每一組資料,輸出2n個大寫字母,‘G’表示好人,‘B’表示壞人,50個字母為一行,不允許出現空白字符,相鄰資料間留有一空行,
Sample Input
2 3 2 4
Sample Output
GBBG
BGGB
#include <iostream>
#include <vector>
#include <list>
using namespace std;
vector<int> vec;
int main()
{
int n,m;
while(cin>>n>>m){
int pos=0,i;//pos查詢壞人下標
for(i=0;i<2*n;i++){
vec.push_back(i);
}
//用resize后,無法記錄好人壞人下標,需再次賦值
for(i=0;i<n;i++){
pos=(pos+m-1)%vec.size();//每次的人數不同,
vec.erase(vec.begin()+pos);//里面放迭代器
}
int j=0;
for(i=0;i<2*n;i++){
if(!(i%50)&&i)cout << '\n';
if(vec[j]==i&&j<vec.size()){
j++;
cout << 'G';
}
else cout << 'B';
}
vec.clear();//vec清空
cout << "\n\n";
}
return 0;
}
/*
#include <iostream>
#include <vector>
#include <algorithm> //for_each
#include <ctime>
using namespace std;
void STRConstructor() //初始化,輸入
{
vector<int> vec(5,12);
//cout << vec << endl; 錯誤
vector<int> vec1(5);
for(int i=0;i<5;i++)
cout << vec1[i] << endl;
vector<int> vec3(vec); //vector<char>就不行,<>中間必須相同
//cout << vec3 << endl; 錯誤
vector<int>::iterator ite=vec3.begin();
vector<int>::iterator ite1=vec3.end();
vector<int> vec4(ite,ite1);
//cout << vec4 << endl; 錯誤
for(int i=0;i<3;i++)
cout << vec4[i] << endl;
}
void strcapacity()
{
vector<int>vec(3);
vector<int>vec2();
//cout << vec.empty() << '\n' << vec2.empty() << endl; //報錯?
vec.reserve(10);
cout << vec.size() << vec.capacity() << endl;
vec.resize(2); //重新設定元素個數
cout << vec.size() << vec.capacity() << endl;
//vector<int> vec1(5);
//vec1.push_back(1);
//vec1.push_back(1); //不同編譯器,效果不同 vs現有容量的一半
//cout << vec1.capacity() << endl;
//重新申請空間會使迭代器失效0
}
void fun(int i) //不能用模板
{
cout << i << ' ';
}
void output() //輸出
{
vector<int>vec;
for(int i=0;i<10;i++)
{
vec.push_back(i);
cout << vec[i] << vec.at(i) <<endl;
}
cout << vec.back() << endl;
vector<int>::iterator ite=vec.begin();
for(;ite!=vec.end();ite++)
{
cout << *ite << endl;
}
for_each(vec.begin(),vec.end(),fun);
}
void operation() //操作函式
{
vector<int>vec;
vector<int>vec1(5,5);
for(int i=0;i<10;i++)
{
vec.push_back(i); //尾添加
}
//vec.insert(vec.begin()+3,12);
//vec.insert(vec.begin()+2,3,3);
//vec.insert(vec.begin()+3,vec1.begin(),vec1.begin()+2);
vec.pop_back(); //尾洗掉
//vec.erase(vec.begin()+3);
//vec.erase(vec.begin()+3,vec.end());
//vec.swap(vec1,vec);
cout << (vec<vec1) << endl;
for_each(vec.begin(),vec.end(),fun);
}
void algorithm() //需要頭檔案include<algorithm>
{
vector<int>vec;
vector<int>vec1(5,5);
for(int i=0;i<10;i++)
{
vec.push_back(10-i); //尾添加
}
for_each(vec.begin(),vec.end(),fun);
sort(vec.begin(),vec.end());
for_each(vec.begin(),vec.end(),fun);
sort(vec.begin(),vec.end(),greater<int>()); //include<functional>
for_each(vec.begin(),vec.end(),fun);
}
void supplement() //補充
{
vector<int>vec;
for(int i=0;i<10;i++)
{
vec.push_back(i);
}
vector<int>vec1(8,14);
//vec.assign(vec1.begin(),vec1.end()); //清除以前的,從新賦值
//vec.assign(3,0); //清除以前的,從新賦值
//vec.clear();
srand((unsigned int)time(0)); //真正的隨機
random_shuffle(vec.begin(),vec.end()); //隨機亂序
for_each(vec.begin(),vec.end(),fun);
cout << endl;
random_shuffle(vec.begin(),vec.end());
for_each(vec.begin(),vec.end(),fun);
cout << endl;
}
int main()
{
//vector<int> vec;
//STRConstructor();
//strcapacity();
//output();
operation();
//algorithm();
//supplement();
return 0;
}
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71521.html
標籤:C++
上一篇:poj-1753題題解思路
下一篇:快速冪與矩陣快速冪
