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