标签: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