hdu1276 STL list列表

list 用法

1.构造函数和析构函数

         list<TYPE> c        产生一个空list,没有任何元素

         list<TYPE> c1(c2)       产生一个与c2同型的list

         list<TYPE> c(n)         产生一个拥有n个元素的list

         list<TYPE> c(n,value)     产生一个拥有n个元素且值为value的list

         list<TYPE> (beg,end)      产生一个值为[beg,end)区间的元素的list

         c.~list<TYPE>()       销毁所有元素,释放内存

2.主要成员函数

         back()  返回最后一个元素的引用(值)

         front()   返回第一个元素的引用

         iterator begin()  返回指向第一个元素的迭代器

         iterator end() 返回指向最后一个元素之后的迭代器

         void clear()  清空列表

         bool empty()  是否为空

         iterator erase(iterator pos)  删除pos所指元素并返回下一元素迭代器

         iterator erase(iterator start,iterator end)  删除[start,end)之间所指元素并返回下一元素迭代器

         iterator insert(iterator pos,const type value)  在pos位置插入元素并返回迭代器

         void insert(iterator pos,iterator start,iterator end)  在pos位置插入区间[start,end)之间元素

         void insert(iterator pos,size_type num,const type value)  在pos位置插入num个value元素

         void merge(list list2)  将list2合并到list1,默认使用小于号比较插入

         void pop_back()    删除最后一个元素

         void pop_front()   删除第一个元素

         void push_back()    插入到最后

         void push_front()   插入到头部

         void remove(const type value)  删除所有value

         size_type size()    返回list中元素的数量

         void sort()  排序

         void reverse()  反转

         void swap(list list2)   交换两个列表中的元素

         void unique()    去除列表中的重复元素

题:

Problem Description
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
 
Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
 
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 

Sample Input

2
20
40
 
Sample Output
1 7 19
1 19 37
#include <bits/stdc++.h>
using namespace std;
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		int num;
		int k=2;
		scanf("%d",&num);
		list <int> mylist;
		list <int>::iterator it;
		for(int i=1;i<=num;i++){
			mylist.push_back(i);
		}
		while( mylist.size()>3){
			int num=1;
			for(it=mylist.begin();it!=mylist.end() ; ){
				if( num++ % k==0){
					it=mylist.erase(it);
				}else {
					it++;
				}
			}
			k==2?k=3:k=2;
		}
		for(it =mylist.begin();it!=mylist.end() ;it++ ){
			if( it!=mylist.begin() ){
				cout<<" ";
			}
			cout<<*it;
		}
		cout<<endl;
	}
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/lyj1/p/11503106.html
今日推荐