hdu 1276 士兵队列训练问题
来源:互联网 发布:充电桩软件 编辑:程序博客网 时间:2024/05/23 20:51
Problem Description
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input
2
20
40
Sample Output
1 7 19
1 19 37
Author
Cai Minglun
注意:
必须每一轮都点完,而不是数到只剩三人了就停止,还有注意不要超时。
#include<iostream>using namespace std;int main(){ int n,m; int s[5005]; cin>>n; while(n--) { cin>>m; for(int i=1;i<=m;i++) //初始化士兵编号 s[i]=i; int sum=m,a,b; while(sum>3) { a=0,b=0; //赋初始值,a统计个数,b负责累加循环 for(int i=1;i<=m;i++) { if(s[i]) b++; if(b==2) { s[i]=0; //排出出队的士兵(即赋值为0) a++; //负责统计士兵的个数 b=0; } } sum-=a; if(sum<=3) //中途判断条件 break; a=0,b=0; //重新筛选,a、b需要初始化 for(int i=1;i<=m;i++) { if(s[i]) b++; if(b==3) { s[i]=0; a++; b=0; } } sum-=a; } int cnt=0; for(int i=1;i<=m;i++) { if(s[i]) { cnt++; if(cnt!=sum) cout<<s[i]<<" "; else cout<<s[i]<<endl; } } } 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 士兵队列训练问题
- 躁动的小球
- 【九度】质因数的个数 3
- 深度学习Caffe实战笔记(15)CNN网络结构可视化
- tab
- 学习Go语言,关于流程控制
- hdu 1276 士兵队列训练问题
- 问题二十六:C++全局变量的使用实例
- JavaSE 学习参考:变量(2)
- Hdu 5428 The Factor【思维】
- Sublime text的安装
- GetLastError() 显示错误信息
- sklearn——朴素贝叶斯文本分类3
- javaScript中的this关键字
- python—pandas中DataFrame类型数据操作函数