zoukankan      html  css  js  c++  java
  • L1-030 一帮一

    题目:

    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

    输入格式:

    输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

    输出格式:

    每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

    输入样例:

    8
    0 Amy
    1 Tom
    1 Bill
    0 Cindy
    0 Maya
    1 John
    1 Jack
    0 Linda
    

    输出样例:

    Amy Jack
    Tom Linda
    Bill Maya
    Cindy John
    

    思路:

    将所有学生的性别按输入顺序存入数组sex,女生按输入顺序存入一个vector girl,男生按输入顺序存入一个vector boy。遍历数组sex,如果当前元素为零,输出girl的第一个元素和boy的最后一个元素,同时移除girl的第一个元素和boy的最后一个元素;如果当前元素为一,输出boy的第一个元素和girl的最后一个元素,同时移除boy的第一个元素和girl的最后一个元素。

    知识点for me:

    1、*(vec.end()-1)获取vector的最后一个元素。end()指向末尾元素的下一个元素。

    2、pop_back()可以删除vector的最后一个元素,而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

       下面是vector中常用的插入和删除操作,转自https://blog.csdn.net/lixiaogang_theanswer/article/details/78143375

    insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.
    push_back(ele); //尾部插入元素ele
    pop_back();//删除最后一个元素
    erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素
    erase(const_iterator pos);//删除迭代器指向的元素
    clear();//删除容器中所有元素
    

        迭代器用于erase删除元素后,其后会失效,即不能再用该迭代器操作向量。如,例子中的k,当再次用来删除向量的元素后,就会报错。

    vector< int > vecInt;
    vector< int >::iterator k = vecInt.begin();
    vecInt.erase(k); // 删除第一个元素
    //vecInt.erase(k);  迭代器k已经失效,会出错
    vecInt.erase(vecInt.begin(),vecInt.end()); // 删除所有元素
    

    上代码:

    #include <vector>
    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        int sex;
        string name;
        vector<string> girl;
        vector<string> boy;
        int stu[n];
        for(int i=0;i<n;i++)
        {
            cin>>sex;
            cin>>name;
            stu[i]=sex;
            if(sex==0)
                girl.push_back(name);
            if(sex==1)
                boy.push_back(name);
        }
        int g=0,b=0;
        for(int i=0;i<n/2;i++){
            if(stu[i]==0)
            {
                cout<<girl[g]<<" "<<*(boy.end()-1)<<endl;
                boy.pop_back();
                g++;
            }              
              else
              {
                  cout<<boy[b]<<" "<<*(girl.end()-1)<<endl;
                  girl.pop_back();
                  b++;
            }
              
        }
        return 0;
    }
  • 相关阅读:
    设计模式
    【C/C++多线程编程之六】pthread相互排斥量
    J2EE的13个规范之(三) Servlet简单介绍
    .NET实现单点登录研究过程总结--【SSO】
    hdu4081 次小生成树变形
    eclipse代码提示框背景色改动
    Linux SO_KEEPALIVE属性,心跳
    [实战]MVC5+EF6+MySql企业网盘实战(20)——Bootstrap Paginator
    [工具]图片等比例压缩工具
    [工具类]视频音频格式转换
  • 原文地址:https://www.cnblogs.com/littleLittleTiger/p/10366780.html
Copyright © 2011-2022 走看看