L1-030 一帮一

2019-02-17 01:47:27来源:博客园 阅读 ()

新老客户大回馈,云服务器低至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中常用的插入和删除操作,转自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;
}

 


原文链接:https://www.cnblogs.com/littleLittleTiger/p/10366780.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:37.QT-QTSingleApplication-程序只运行一个实例

下一篇:36.QT-解决无边框界面拖动卡屏问题(附带源码)