• vector的简单运用(士兵队列训练问题)


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

    思路很简单:就是放入一个vector容器里面,while循环,满足条件的就删除。做题过程中很容易被删除弄出bug,因为动态数组大小随时在变,所以无法很自然的删除。

    因此,这种删除最为方便快捷。所以以后要注意指针的改变!!!!

    int main(){  
        vector<int> a;  
        a.push_back(3);  
        a.push_back(2);  
        a.push_back(3);  
        a.push_back(3);  
        a.push_back(5);  
        vector<int>::iterator b;  
        int x = 3;  
        for(b=a.begin();b!=a.end();)  
        {  
            if(*b==x){  
                b=a.erase(b);  
            }else{  
                b++;  
            }  
        }  
        for(b=a.begin();b!=a.end();b++)  
        {  
            printf("value=%d
    ", *b);  
        }  
        return 0;  
    }  
    同时附上题目代码
    #include<iostream>
    #include<string>
    #include<set>
    #include<vector>
    #include<stack>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        while(n--)
        {
            int m;
            vector<int > vec;
            cin>>m;
            for(int i=1;i<=m;i++)
                vec.push_back(i);
    
            vector<int>::iterator it;
       while(vec.size()>3)
       {
        int flag=1;
        for(it=vec.begin();it!=vec.end();)
                   {if(flag%2==0) it=vec.erase(it);
                   else
                    it++;
                    flag++;}
                    if(vec.size()<=3) break;
                    flag=1;
                    for(it=vec.begin();it!=vec.end();)
                   {if(flag%3==0) it=vec.erase(it);
                   else
                    it++;
                    flag++;}
       }
    
    int flag=1;
           for(it=vec.begin();it!=vec.end();it++)
           {
               if(flag==1)
               cout<<*it;
               else cout<<" "<<*it;
               flag++;
           }
         cout<<endl;
     
    
        }
        return 0;
    }
    

      

  • 相关阅读:
    潜水员(二维DP)
    开餐馆(OJ 6045)
    石子归并(区间DP)
    庆功会(多重背包)
    JavaScript案例三:动态显示时间
    JavaScript案例二:在末尾添加节点
    JavaScript案例一:Window弹窗案例
    JavaScript BOM对象介绍
    JavaScript模拟函数重载
    MapReduce作业和任务
  • 原文地址:https://www.cnblogs.com/blvt/p/7196219.html
Copyright © 2020-2023  润新知