zoukankan      html  css  js  c++  java
  • 寒假Day40:HDU1267士兵训练问题暴力

    某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
    
    Input
    本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 Output
    共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 Sample Input
    2 20 40 Sample Output 1 7 19 1 19 37

    其实感觉从这一题上看,自己的代码能力还是很弱,

    就类似于约瑟夫环问题,

    一些问题没法很顺畅的从脑子里表达出来,

    按理说类似这种题目应该很快敲出来,但是我没有。

    好好反思这段时间的行为吧,

    要对自己负责。

    这一题还可以用队列写,但是我写了,但是答案不对,网上的我也没看懂。

    AC代码:(暴力)

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<stack>
    #include<queue>
    using namespace std;
    
    bool book[5050];
    
    int main()
    {
        int t,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            memset(book,0,sizeof(book));
            int q=n,flag=0;
            while(q>3)
            {
                int p=0;
                for(int i=1; i<=n; i++)
                {
                    if(book[i]==0)
                    {
                        p++;
                        if((flag==0&&p%2==0)||(flag&&p%3==0))
                        {
                            book[i]=1;
                            q--;
                        }
                    }
                }
                if(flag)
                    flag=0;
                else
                    flag=1;
            }
            printf("1");
            for(int i=2; i<=n; i++)
            {
                if(book[i]==0)
                    printf(" %d",i);
            }
            printf("\n");
        }
        return 0;
    }
  • 相关阅读:
    进度条加载后显示页面
    解决跨域问题
    js下IE和FF的一些兼容写法总结
    linux
    linux 批量替换文件内容
    DVWA-1.9之fileupload
    python库安装失败的解决方法
    python程序打包
    CF 1133C Balanced Team
    CF 1133B Preparation for International Women's Day
  • 原文地址:https://www.cnblogs.com/OFSHK/p/12416431.html
Copyright © 2011-2022 走看看