hdoj.1276 士兵队列训练问题【水题】 2015/05/30
2015-05-30 23:18
106 查看
士兵队列训练问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4173 Accepted Submission(s): 1937
[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)
#include<iostream> using namespace std; int soid[5005]; int t,n; int main(){ cin>>t; int i,j,k; while(t--){ cin>>n; for( i = 1 ; i <= n ; ++i ) soid[i] = i; j = n+1; while( j > 4 ){ k = 1; for( i = 1 ; i < j ; ++i ) if( i % 2 ) soid[k++] = soid[i]; j = k; if( j <= 4 ) break; k = 1; for( i = 1 ; i < j ; ++i ) if( i % 3 ) soid[k++] = soid[i]; j = k; } cout<<'1'; for( i = 2 ; i < j ; ++i ) cout<<' '<<soid[i]; cout<<endl; } return 0; }
注意条件,先一至二报数,再一至三报数,只要人数少于4人就结束报数。
相关文章推荐
- HDU 4858 Shaolin(map暴力)
- InputStream的三个read的区别
- 自定义属性之图片切换实例——代码简化、函数合并——JS学习笔记2015-5-30(第43天)
- Flash和Arduino进行交互时不断重连
- 并行笔记
- lua语言连接redis
- Unity 3D中的内存管理
- Filter
- Python删除列表重复数据以及效率问题
- eclipse maven 插件
- SQL数据库约束行为---防止数据乱填(即数据规范化)
- uibutton(上下左右箭头加放大和缩小)
- bzoj2440
- 在ASP.NET 5中如何方便的添加前端库
- bzoj2440 分类: bzoj 2015-05-30 23:15 29人阅读 评论(0) 收藏
- 云计算和其三种服务模式:IaaS,PaaS和SaaS
- 如何使用Monit部署服务器监控系统
- 计算微博昵称的size
- Linux: centos软件包管理的3种方式
- bzoj2301