考研真题1---成绩排序

题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入

3
0
fang 90
yang 50
ning 70
输出

fang 90
ning 70
yang 50

**这是一道考研题,使用传统的字符串形式,根据分数高低进行排序,可以实现。也可以根据C++里面的map列表进行排序,还可以根据java里面的集合中的list和map来做。
试着用了一下,java里面的list列表和map做了一下,发现用list比用map简单一些。
list版**

package com.link;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
class student
{
public String name;
public int score;
public student(String name,int score)
{
this.name=name;
this.score=score;
}
}
public class Test
{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);

    while(sc.hasNext())
    {
        int num=sc.nextInt();
        int option=sc.nextInt();
        List<student> list=new ArrayList<student>();
        for(int i=0;i<num;i++)
        {
            list.add(new student(sc.next(),sc.nextInt()));
        }
        //Collections集合排序
        if(option==1)
        {
            Collections.sort(list,new Comparator<student>()
            {       
                public int compare(student o1,student o2)
                {
                    //升序
                    return o1.score-o2.score;

                }
                    });
        }
        else if(option==0)
        {
            Collections.sort(list,new Comparator<student>()
                    {       
                        public int compare(student o1,student o2)
                        {
                            //降序
                            return o2.score-o1.score;

                        }
                    });     

        }
        for(int i=0;i<list.size();i++)
        {
            System.out.println(list.get(i).name+" "+list.get(i).score);
        }
    }

}

}

map方法:
package com.map;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

public static void main(String[] args) {
    Map<String,Integer> ms=new TreeMap<String,Integer>();
    Scanner s=new Scanner(System.in);
    int m=s.nextInt();

    int sel=s.nextInt();
    int i=1;
    while(i<=m)
    {
        String s1=s.next();
        int s2=s.nextInt();
        ms.put(s1, s2);
        i++;

    }
    List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(ms.entrySet());
    if(sel==1)
    {

        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
        @Override
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            //升序
            return o1.getValue()-o2.getValue();
        }
    });
    }
    else if(sel==0)
    {
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                //降序
                return o2.getValue()-o1.getValue();
            }
        });
    }
    for (int j=0;j< list.size(); j++) {
        Map.Entry<String, Integer> map = list.get(j);
        System.out.println(map.getKey()+" "+map.getValue());
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值