c/c++语言开发共享L1-030 一帮一

题目: “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。 输入格式: 输入第一行给出正偶数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; }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/605251.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐