zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/wzl19981116/p/9400666.html
Copyright © 2011-2022 走看看