欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hdu1276 士兵队列训练问题-list容器

发布时间:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hdu1276 士兵队列训练问题-list容器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

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

Sample Input

2
20
40

Sample Output

1 7 19
1 19 37

代码如下:

#include <iostream> #include <list> using namespace std;int main() {int cnt;cin >> cnt;while (cnt--) {list<int>ml;list<int>::iterator it;int n;cin >> n;for (int i = 1; i <= n; i++)ml.push_back(i);int k = 2;while (ml.size()>3) {int num = 1;for (it = ml.begin(); it != ml.end();) {if (num++ % k == 0) {it = ml.erase(it);} elseit++;}k == 2 ? k = 3 : k = 2;//注意k==2,不要不小心写成k = 2}for (it = ml.begin(); it != ml.end(); it++) {if (it != ml.begin())cout << " ";cout << *it;}cout << endl;}return 0; }

总结

以上是生活随笔为你收集整理的hdu1276 士兵队列训练问题-list容器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。