获取中...

-

Just a minute...

  • 题目描述

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

    Input

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

    Output

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

  • Sample Input

1
2 20 40
  • Sample Output
1
1 7 19 1 19 37
  • 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
************************/

#include<bits/stdc++.h>

using namespace std;

int main(){

int N,n,sol_num,cnt;

int sol[5005];

//输入数据的组数;

cin>>n;

while(n--){

//每次都需要把数组清零;

memset(sol,0,sizeof(sol));

//输入新兵的人数;

cin>>sol_num;

//把初始编号存入数组;

for(int i=1;i<=sol_num;i++) sol[i]=i;

//把变量sol_num用作每次筛选剩下的人数;

N=sol_num;

//剩下的人数不超过3个;

while(sol_num>3){

cnt=0;

//当人数不超过3个的时候跳出

if(sol_num>3){

//每次都循环到N;

for(int i=1;i<=N;i++){

//跳过被赋值为另的位置;

if(sol[i]) cnt++;

//把报数为2的赋值为0,当前长度减1;

if(cnt==2){

sol[i]=0;

sol_num--;

cnt=0;

}

}

}

cnt=0;

//当人数不超过三个的时候跳出;

if(sol_num>3){

for(int i=1;i<=N;i++){

if(sol[i]) cnt++;

if(cnt==3){

sol[i]=0;

sol_num--;

cnt=0;

}

}

}

}

//输出的时候注意控制空格,为零的位置要直接跳过;

int tmp=0;

for(int i=1;i<=N;i++){

if(sol[i]!=0){

if(tmp==1) cout<<" ";

tmp=1;

cout<<sol[i];

}

}

cout<<endl;

}

return 0;

}




该题思想来自网络;

相关文章
评论
分享
  • POJ-1979

    原题目:DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A m...

    POJ-1979
  • Codeforces-787a

    题目传送 题目思路:拓展欧几里德:$$ax+b=cy+d; <=> ax+cy=d-b;$$ 代码: 12345678910111213141516171819202122232425...

    Codeforces-787a
  • HDU-1072

    题目描述:首先输入一个N;代表测试数据的个数;然后每个测试数据的开头第一行输入一个n和一个命令(FIFO或FILO<就是先进先出或先进后出>)然后是该测试数据的n行,每行包括“IN”加一个数字(代表入栈或入队)或者一个“...

    HDU-1072
  • HDU-1222

    题目传送 题目描述: There is a hill with n holes around. The holes are signed from 0 to n-1. A rabbit must hide in one of t...

    HDU-1222
  • HDU - 2072

    题目传送 Sample Input 1you are my friend # Sample Output 14 思路: 利用STL的set,但是需要注意字符串的处理,利用set的特性,建立一个中间字符串变量tmp,把当前单...

    HDU - 2072
  • BASH杂记

    BASH杂记
  • 八大排序算法总结

    直接插入排序算法 概述直接插入排序算法在逻辑上将整体数据分为两部分,一部分是已排序部分,另一部分是待排序部分 。排序的过程是:在待排序部分逐步的拿出一个元素,将其插入到已排序部分中合理的位置 。 适用场景插入排序在对几乎已经排好序的数...

    八大排序算法总结
  • hexo低成本搭建静态网页博客

    引言好多同学有写博客的习惯,也有各大例如csd、简等博客平台。但是这些平台毕竟是盈利平台,无法做到对自己的博客完全掌控,有一丝丝的不爽快。想要DIY一下几乎不可能。在这里推荐同学们自己动手丰衣足食。 准备知识 github最基本的使用...

    hexo低成本搭建静态网页博客
  • CPU信息获取

    准备知识 /proc文件系统是一个伪文件系统,该文件系统中存储着内核控制相关信息,通俗点说就是这个目录是虚拟的,它受内核直接控制,存储与内核控制相关的数据,与其他目录不同的是/proc目录不是真实存储在硬盘中的,它的数据存储在内存...

    CPU信息获取
  • BASH脚本实现素数线性筛

    知识准备 for循环12345678910111213141516171819202122232425for i in `seq 1 10`;do echo ${i}done#执行结果---------12345...

    BASH脚本实现素数线性筛
Please check the parameter of comment in config.yml of hexo-theme-Annie!