标签:des style blog io ar os sp for on
Description
Input
第一行输入小孩的人数N(N<=64)
Output
按人名输出小孩按顺序出列的顺序,每行输出一个人名
Sample Input
5
Sample Output
ZhangsanLisi
Source
题目大意:题意很明确,就是约瑟夫环。不过从第W个位置开始计数1,数S个
位置,然后出环,输出。
思路:用STL里边的string存放小孩的名字。用list双向链表模拟约瑟夫环。
注意:
string里边clear();用来清除所有字符。
list里push_back(i);用来将编号i放入list
begin();指向第一个元素的位置
end();指向最后一个元素后边的位置
list<int>::iterator it;迭代器用来指向报数编号。
find(first,last,value);用来在区间[first,last)之间找到值等于value的位置
erase(it);用来删除迭代器it指向的元素
*it 表示迭代器it指向的元素值
#include<iostream>
#include<algorithm>
#include<string>
#include<list>
using namespace std;
string child[100];
list<int> v;
int main()
{
int N,W,S;
while(cin >> N)
{
v.clear();
for(int i = 1; i <= N; ++i)
child[i].clear();
char c;
for(int i = 1; i <= N; ++i)
cin >> child[i];
cin >> W >> c >> S;
for(int i = 1; i <= N; ++i)
v.push_back(i);
list<int>::iterator it;
it = find(v.begin(),v.end(),W);
while(v.size() > 0)
{
for(int i = 1; i < S; i++)
{
++it;
if(it == v.end())
it = v.begin();
}
cout << child[*it] << endl;
it = v.erase(it);
if(it == v.end())
it == v.begin();
}
}
return 0;
}
POJ3750_小孩报数问题【约瑟夫环】【string】【list】
标签:des style blog io ar os sp for on
原文地址:http://blog.csdn.net/lianai911/article/details/41777151