HDU 1276 士兵队列训练问题
来源:互联网 发布:广州sd卡数据恢复 编辑:程序博客网 时间:2024/06/05 03:44
Problem Description
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input
2
20
40
Sample Output
1 7 19
1 19 37
简单模拟题,按要求做就行了。
需要注意的是题意是报到能被2或3整除的数出队,而不是尾数是2或3的出队。
#include <cstdio>#include <cstring>using namespace std;const int maxn = 5005;int a[maxn];int main(int argc, char const *argv[]){ int N; scanf("%d",&N); while(N--) { int n; scanf("%d",&n); memset(a,-1,sizeof(a)); for(int i = 1;i <= n;i++) a[i] = i; int flag = 1,temp = n; while(n > 3) { if(flag) { for(int i = 1;i <= temp;i++) if(a[i] != -1 && a[i]%2 == 0) { a[i] = -1; n--; } flag = 0; } else { for(int i = 1;i <= temp;i++) if(a[i] != -1 && a[i]%3 == 0) { a[i] = -1; n--; } flag = 1; } for(int i = 1,j = 1;i <= temp;i++) { if(a[i] != -1) a[i] = j++; } } int first = 1; for(int i = 1;i <= temp;i++) if(a[i] != -1) { if(first) { printf("%d",i); first = 0; } else printf(" %d",i); } printf("\n"); } return 0;}
0 0
- hdu 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- hdu-1276-士兵队列训练问题
- hdu,1276,士兵队列训练问题
- hdu(1276)士兵队列训练问题
- hdu 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- hdu 1276 士兵队列训练问题
- hdu-1276-士兵队列训练问题
- HDU 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- hdu---1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- 士兵队列训练问题(HDU 1276)
- HDU 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- hdu 1276 士兵队列训练问题
- Codeforces Round #330 (Div. 2)B Pasha and Phone
- Cocoapods第三方库快速集成
- HTML5 的标签大全以及相关属性
- Spring注解详解
- 安卓中的gridview
- HDU 1276 士兵队列训练问题
- DAO层,Service层,Controller层、View层介绍
- nfs挂载根文件系统笔记
- 第十周 项目三 利用二叉树遍历思想解决问题
- sqoop1.99.4安装与应用
- swift 快速奔跑的兔几 本节的内容是:SpriteKit第三讲 纹理和纹理贴图集
- 软件工程c编码随笔
- 新的軟件質量評估方法--權重計算
- 第7周 项目3 负数把正数赶出队列