百度网站加v,搜索网站入口,seo顾问和seo专员,网站统计平台Problem Description 某部队进行新兵队列训练#xff0c;将新兵从一开始按顺序依次编号#xff0c;并排成一行横队#xff0c;训练的规则如下#xff1a;从头开始一至二报数#xff0c;凡报到二的出列#xff0c;剩下的向小序号方向靠拢#xff0c;再从头开始进行一至三…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--) {listintml;listint::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;//注意k2不要不小心写成k 2}for (it ml.begin(); it ! ml.end(); it) {if (it ! ml.begin())cout ;cout *it;}cout endl;}return 0;
}