欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

L1-030 一帮一

程序员文章站 2023-08-18 23:55:04
题目: “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。 输入格式: 输入第一行给出正偶数N(≤5 ......

题目:

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

输入格式:

输入第一行给出正偶数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中常用的插入和删除操作,转自

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;
}