c++世界冒险手册(开始-1)

开始

小D与同伴们决定前去传送门到新世界探险
但要开启传送门必须完成几项任务
——————————————————

  • 1,2,3报数
  • 排队接水
  • 队员分组

——————————————————
作死的不怕死的小D决定挑战
当他按下“开始”后看见了一行小字:
22天内不完成任务将扣钱9827192682兆亿个彩石币
要知道,1个彩石币=999999钻石币=99999999999999999金币=9999999999999999999999999999999银币=9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999亿人民币

于是他找到了善于编程的你来帮忙完成任务并友情地帮你报了名

1,2,3报数

任务: 传送门的守护者从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
已知
本题有多个测试数据组,第一行为组数N,接着为N行守护者人数,人数不超过5000。
需要求出
共有N行,分别对应输入的守护者人数,每行输出剩下的守护者最初的编号,编号之间有一个空格。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define N 5001
struct queue  {
	int f,r,data[N];
	void init(){
		f=r=0;}
    void push(int a)   {
	  data[r++]=a;}
    int  gettop() {
    	return data[f++];}
    bool judge(){  
         return r-f<4; }
    bool empty() {
    	return r==f;} }q[2];
int main() {
	int T,n,i;
	cin>>T;
	while(T--){
		cin>>n;
		q[0].init(),q[1].init();
		for(i=1;i<=n;i++)
		{q[0].push(i);}
		int now=0,pre=1;
		i=0;
		while(!q[now].judge()){ 
		q[pre].init();
            if(i&1) {
            	while(!q[now].empty()){
            		q[pre].push(q[now].gettop());
            		if(q[now].empty())
            			break;
            		q[pre].push(q[now].gettop());
            		if(q[now].empty())
            			break;
            		q[now].gettop();}}
            else{
            	while(!q[now].empty()){
            		q[pre].push(q[now].gettop());
            		if(q[now].empty())
            			break;
            		q[now].gettop();
            	}}
            i^=1;
            swap(now,pre);}
		cout<<q[now].gettop();
		while(!q[now].empty()){
			cout<<' '<<q[now].gettop();
		}}
	return 0; }

ε=(´ο`*)))唉终于弄好了一个任务。Σ( ° △ °|||)︴等等!小D你别跳舞!你一跳舞就装b,会造雷劈。。。。。。
c++世界冒险手册(开始-1)——————————————分割线——————————————————————

求点赞,求关注,求留言!(๑•̀ㅂ•́)و✧