队列题目

来源:互联网 发布:定位寻人软件 编辑:程序博客网 时间:2024/06/03 09:42
A - 士兵队列训练问题
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status Practice HDU 1276

Description

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 
 

Input

本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 
 

Output

共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 
 

Sample Input

22040
 

Sample Output

1 7 191 19 37


#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#include<vector>#include<queue>#include<stack>#include<iostream>#include<string>#include<algorithm>using namespace std;#define MaxSize 5005#define inf 0x3f3f3f3fint num,book[MaxSize];int main(){  int T,n;  while(~scanf("%d",&T))    {      while(T--)        {          scanf("%d",&n);          num=n;          for(int i=1; i<=n; i++)            book[i]=i;          int cnt;          while(1)            {              if(num<=3) break;              for(int i=1,cnt=0; i<=n; i++)                {                  if(book[i]!=0)                    {                      cnt++;                      if(cnt==2)                        {                          book[i]=0;                          cnt=0;                          num--;//                          if(num<=3)//                            break;                        }                    }                }              if(num<=3) break;              for(int i=1,cnt=0; i<=n; i++)                {                  if(book[i]!=0)                    {                      cnt++;                      if(cnt==3)                        {                          book[i]=0;                          cnt=0;                          num--;//                          if(num<=3)//                            break;                        }                    }                }              if(num<=3) break;            }          for(int i=1,cnt=0; i<=n; i++)            {              if(book[i]!=0)                {                  cnt++;                  if(cnt!=num)                    printf("%d ",i);                  else printf("%d\n",i);                }            }        }    }  return 0;}//FROM CJZ

是一道模拟的题,我因为意思理解错了,wa了很多次。它是每一轮完了之后才判断,而不是一出现少于三个人的情况就停止。

0 0
原创粉丝点击