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,会造雷劈。。。。。。——————————————分割线——————————————————————