A - 小孩报数问题

有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。

Input

第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号","间隔

Output

按人名输出小孩按顺序出列的顺序,每行输出一个人名

Sample Input

5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3

Sample Output

Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi

用一个vector储存,然后报到的就eraser掉就好了,超过就从头开始算;

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iomanip>
#include<cmath>
#include<float.h> 
#include<string.h>
#include<algorithm>
#define sf scanf
#define pf printf
//#define pb push_back
#define mm(x,b) memset((x),(b),sizeof(x))
#include<vector>
#include<queue>
//#include<map>
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
typedef long long ll;
typedef long double ld;
typedef double db;
const ll mod=1e9+100;
const db e=exp(1);
using namespace std;
const double pi=acos(-1.0);
vector<string>v;
int main()
{
	int n,w,s;
	string x;
	cin>>n; 
	v.push_back("0");
	while(n--)
	{
		cin>>x;
		v.push_back(x); 
	}
	sf("%d,%d",&w,&s);//用cin会wa,不知道为什么
	while(v.size()>2)
	{
		w=w+s-1;
		while(w>=v.size())
		{
			w=w-v.size()+1;//这个试一下就可以发现
		}
		cout<<v[w]<<endl;
		v.erase(v.begin()+w); 
	}
	cout<<v[1]<<endl;
	return 0;
}
posted @ 2018-08-01 13:18  一无所知小白龙  阅读(412)  评论(0编辑  收藏  举报