L1-030 一帮一 (15分) JAVA
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数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
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
ArrayList<Stu> list = new ArrayList<>();
int rank=0;
while(n-- >0){
Stu stu = new Stu(scanner.nextInt(), scanner.next(),rank);
list.add(stu);
rank++;
}
HashMap<Integer, String[]> map = new HashMap<>();
while(list.isEmpty()==false){
int sex=list.get(0).sex;
for (int i=list.size()-1;i>=0;i--){
if (sex!=list.get(i).sex){
String[] data=new String[2];
data[0]=list.get(0).name;
data[1]=list.get(i).name;
map.put(list.get(0).rank,data);
list.remove(i);
list.remove(0);
break;
}
}
}
for (int i=0;i<map.size();i++){
if (map.containsKey(i)){
System.out.println(map.get(i)[0]+" "+map.get(i)[1]);
}
}
}
}
class Stu{
int sex;
String name;
int rank;
public Stu(int sex, String name, int rank) {
this.sex = sex;
this.name = name;
this.rank = rank;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
}