读书人

HDU1276:士兵队列训练有关问题

发布时间: 2013-03-06 16:20:31 作者: rapoo

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

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

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

Sample Input

22040

Sample Output
1 7 191 19 37


//这题蛋疼,要注意题意

意识必须每一轮都点完,而不是一数到只剩三人了就停止

二是要注意不要超时

#include <iostream>using namespace std;int main(){    int n;    while(cin >> n)    {        while(n--)        {            int m,a[5005] = {0},i;            cin >> m;            int sum;            sum = m;            for(i = 1; i<=m; i++)            {                a[i] = i;            }            if(m<=3)            {                cout << "1";                for(i = 2; i<=m; i++)                {                    if(a[i])                    {                        cout << " " << a[i];                    }                }                cout << endl;                continue;            }            while(1)            {                int flag = 0;                for(i = 1; i<=m; i++)                {                    if(a[i])                        flag++;                    if(flag==2)                    {                        a[i] = 0;                        flag = 0;                        sum--;                    }                }                if(sum<=3)                break;                flag = 0;                for(i = 1; i<=m; i++)                {                    if(a[i])                        flag++;                    if(flag==3)                    {                        a[i] = 0;                        flag = 0;                        sum--;                    }                }                if(sum<=3)                    break;            }            cout << "1";            sum--;            for(i = 2; sum; i++)            {                if(a[i])                {                    cout << " " << a[i];                    sum--;                }            }            cout << endl;        }    }    return 0;}


读书人网 >编程

热点推荐