hdoj 1276 士兵队列训练问题 【队列(模拟)】
2015-09-16 22:31
344 查看
士兵队列训练问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4693 Accepted Submission(s): 2198
[align=left]Problem Description[/align]
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
[align=left]Input[/align]
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
[align=left]Output[/align]
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
[align=left]Sample Input[/align]
2 20 40
[align=left]Sample Output[/align]
1 7 19 1 19 37
[align=left]Author[/align]
Cai Minglun
[align=left]Source[/align]
杭电ACM集训队训练赛(VI)
思路:
这道题是一道模拟题,在模拟之前需要我们进行判断一下剩下的士兵人数是否小于等于3,如果满足要求直接输出,否则还需要我们进一步进行筛选,就按照题上说的进行模拟就OK了!
代码:
#include <stdio.h> #include <string.h> struct node { int x,y; }a[5005]; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); int i; for(i=1;i<=n;i++) { a[i].x=a[i].y=i; } if(n<=3) { for(i=1;i<n;i++) { printf("%d ",a[i].x); } printf("%d\n",a .x); continue; } int t=n; while(t>3) { t=1; for(i=1;i<=n;i++) { if(a[i].y%2==0)//&&a[i].x!=0&& { if(a[i].y!=5004) a[i].y=5004; } else { a[i].y=t++; } } if(t-1<=3) break; t=1; for(i=1;i<=n;i++) { if(a[i].y%3==0)//&&a[i].x!=0&& { if(a[i].y!=5004) a[i].y=5004; } else { a[i].y=t++; } } t--; } int flag=0; for(i=1;i<=n;i++) { if(a[i].y<=5000) { if(flag==0) flag=1; else printf(" "); printf("%d",a[i].x); } } printf("\n"); } return 0; }
相关文章推荐
- nyoj 571 整数划分 --- 一个老生长谈的问题:
- Xcode7 遇到问题和解决方法
- 程序从代码到可执行文件的过程简述
- MySQL的一些基本增删改查操作
- 对REST架构的理解及Jquery+JSON+RESTful WCF (附源码)
- LeetCode算法题目之Add Binary 我的思路
- 总结rpm和yum实现程序包的管理功能
- JVM系列文章(一):Java内存区域分析
- strchr与strstr函数
- JSP九大内置对象及四大作用域
- 五大手势
- java__IO_02
- 【2015实习总结】UI设计技巧
- 如何学习Linux 比较经典
- java 编程思想 阅读笔记(2)
- Android 安卓 自定义标题栏+沉浸式状态栏
- linux 下的使用 ln 创建 软链接 和 硬链接
- Android中preference的使用(一)
- fatal error LNK1104: cannot open file 'C:\Program Files\OpenNI2\Lib\\.obj解决方案
- 高性能反向代理软件HAProxy(三)之高可用