题目:
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数N
(≤50),即全班学生的人数。此后N
行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
大致思路:
首先,我们需要用数组把学生的性别和姓名都存起来,方便我们配对,名次最高的配对名次最低的,也就是说,我们需要一个正循环和一个倒循环来配对。并且已配对的,不能再配对第二次,已配对的需要被标记。
代码实现:
代码解析:
a[50]是存放的学生们的性别,b[n][10]是存放的学生们的姓名,由于学生们的姓名是字符串,又有很多个字符串,需要用到二维数组,n代表行数,接下来利用循环,将每一个学生的性别姓名都存到数组里,全部存完以后开始配对,由于名次高的优先配对,所以我们用名次低的去配对名次高的,先写一个正循环,由上到下代表名次高的,再在里面嵌套一个倒循环,也就是从最后一名开始,比如当i等于0时,第一名要配对,我们从最后一名开始往上循环,当满足性别不同且两人都未被配对标记,则在同一行输出这两人的名字,并且将他们的hx替换成1,所有人的hx初始值都为零,1代表已配对。然后再配对第二名,以此往复。