有关队列的应用,水题。可以创造两个队列,模拟报数。
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
queue<int> a,b;
int main()
{
int n,t;
cin>>n;
while(n--) {
cin>>t;
for(int i=1;i<=t;i++) {
a.push(i);
}
int num=0;
while(a.size()>3) {
while(!b.empty()) b.pop();
if(num&1) {
while(!a.empty()) {
b.push(a.front()); a.pop();
if(a.empty()) break;
b.push(a.front()); a.pop();
if(a.empty()) break;
a.pop();
}
}
else{
while(!a.empty()) {
b.push(a.front()); a.pop();
if(a.empty()) break;
a.pop();
}
}
num^=1;
swap(a,b); //a.swap(b);因为编译器问题编不出来
}
cout<<a.front(); a.pop();
while(!a.empty()) {
cout<<' '<<a.front(); a.pop();
}
cout<<endl;
}
return 0;
}
//#include<queue>相关函数
//queue<T> q;
//q.empty(),q.size(),q.push(),q.front(),q.back(),q.pop(),q.emplace(),q.swap();