首页 > 试题广场 >

成绩排序

[编程题]成绩排序
  • 热度指数:193167 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

示例:
jack      70
peter     96
Tom       70
smith     67

从高到低  成绩
peter     96
jack      70
Tom       70
smith     67

从低到高

smith     67

jack      70
Tom      70
peter     96


输入描述:
注意一个case里面有多组样例,请用循环处理输入
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。


输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1

输入

3
0
fang 90
yang 50
ning 70

输出

fang 90
ning 70
yang 50
示例2

输入

3
1
fang 90
yang 50
ning 70
3
0
moolgouua 43
aebjag 87
b 67

输出

yang 50
ning 70
fang 90
aebjag 87
b 67
moolgouua 43

说明

第一组用例:
3
1
fang 90
yang 50
ning 70
升序排序为:
yang 50
ning 70
fang 90
第二组降序为:
aebjag 87
b 67
moolgouua 43  
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            HashMap<String, Integer> map = new HashMap<>();
            int num = in.nextInt();//用于统计输入的个数
            int sort_tar = in.nextInt();//用于作为排序的标准
            for (int i = 0; i < num; i++) {
                // System.out.println("输入人名及成绩");
                map.put(in.next(), in.nextInt());
            }
            Set<Map.Entry<String, Integer>> set = map.entrySet();
            List<Map.Entry<String, Integer>> list = new ArrayList<>(set);
            if (sort_tar == 0) {
                Collections.sort(list, (a, b) -> {
                    return b.getValue() - a.getValue();
                });
            } else if (sort_tar == 1) {
                Collections.sort(list, (a, b) -> {
                    return a.getValue() - b.getValue();
                });
            }
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i).getKey() + " " + list.get(i).getValue());
            }
        }
    }
}
为什么我提交后,和他预期输出对比都是一样一样的,还是不给过?
发表于 2024-03-20 14:11:28 回复(0)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        int x = sc.nextInt();
        Scanner in = new Scanner(System.in);
        Map<String, Integer> map = new HashMap<>();
        for (int j = 0; j < t; j++) {
            String s = in.nextLine();
            String mark = "";
            String name = "";
            for (int i = 0; i < s.length(); i++) {
//                if (s.charAt(i) != '\t') {
                    if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                        mark += s.charAt(i);
                    } else {
                        name += s.charAt(i);
                    }
//                }
            }
            map.put(name, Integer.valueOf(mark));
        }
        if(x==1){
            map.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(stringIntegerEntry -> System.out.println(stringIntegerEntry.getKey()+stringIntegerEntry.getValue()));
        }else  if(x==0){
            map.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue().reversed()).forEach(stringIntegerEntry -> System.out.println(stringIntegerEntry.getKey()+stringIntegerEntry.getValue()));
        }

    }
}

为什么这个牛客上报错,idea上效果是有了

发表于 2019-11-01 13:58:43 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	static class Grade{
		static int ccc=0;
		int count;   //模拟时间戳,解决快排不稳定的问题
		int mark;
		String name;
		Grade(int mark,String name){
			this.mark=mark;
			this.name=name;
			ccc++;
			this.count=ccc;
		}

	}
	public static void main(String[] args) {
		Scanner read=new Scanner(System.in);
		while(read.hasNext()) {
			int n=read.nextInt();
			int flag=read.nextInt();
			Grade[] arr=new Grade[n];
			Grade.ccc=0;
			for(int i=0;i<n;i++) {
				String name=read.next();
				int x=read.nextInt();
				arr[i]=new Grade(x,name);
			}
			if(flag==1)
				Arrays.sort(arr,(a,b)->{
					if(a.mark!=b.mark)
						return a.mark-b.mark;    //升序
					else return a.count-b.count;  //相同成绩则按照count升序排列
				});
			else
				Arrays.sort(arr,(a,b)->{
					if(a.mark!=b.mark)
						return b.mark-a.mark;    //降序
					else return a.count-b.count;  //相同则按count升序
				});
			
			for(int i=0;i<n;i++)
				System.out.println(arr[i].name+" "+arr[i].mark);
		}
	}
}

发表于 2019-08-29 18:44:44 回复(0)
import java.util.Scanner;
import java.util.LinkedList;

// Java 桶排序算法复杂度,O(n) 
// 101个桶,分别保存 0~100分的学生名称, 然后按照ascOrDesc打印出来
public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while(scanner.hasNext()) {
      int stuNum = scanner.nextInt();
      int ascOrDesc = scanner.nextInt();
      LinkedList<String>[] numAndNameList = new LinkedList[101];
      for(int i = 0 ; i < stuNum; i++){
        String name = scanner.next();
        int scoreNum = scanner.nextInt();
        if (numAndNameList[scoreNum] == null) {
          numAndNameList[scoreNum] = new LinkedList<>();
        }
        numAndNameList[scoreNum].addLast(name);
      }
      if (ascOrDesc == 1) {
        for (int i = 0; i <= 100; i++) {
          if (numAndNameList[i] != null) {
            while (!numAndNameList[i].isEmpty()) {
              System.out.println(numAndNameList[i].pollFirst() + " " + i);
            }
          }
        }
      } else {
        for (int i = 100; i >= 0; i--) {
          if (numAndNameList[i] != null) {
            while (!numAndNameList[i].isEmpty()) {
              System.out.println(numAndNameList[i].pollFirst() + " " + i);
            }
          }
        }
      }
    }
  }
} 
发表于 2019-06-03 14:42:53 回复(1)
本地调试可以,提交后提示错误,注意这是多组数据测试,不是一组数据。
发表于 2019-03-26 11:16:57 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
             while(sc.hasNext()) {
                  int count = sc.nextInt();
                  int flag = sc.nextInt();
                  Student [] arr = new Student[count];
                  for(int i=0;i<count;i++) {
                      arr[i] = new Student(sc.next(), sc.nextInt());
                  }
                  
                  switch(flag) {
                      case 0:  Arrays.sort(arr,new Comparator<Student>() {

                      @Override
                      public int compare(Student o1, Student o2) {
                          return o2.age-o1.age;//To change body of generated methods, choose Tools | Templates.
                      }
                      
                      
                      }); break;

                     case 1:  Arrays.sort(arr,new Comparator<Student>() {

                      @Override
                      public int compare(Student o1, Student o2) {
                          return o1.age-o2.age;//To change body of generated methods, choose Tools | Templates.
                      }
                      
                      
                      }); break;

                          
                     
                          
                      
                  }
                  
                  for (int i=0;i<count;i++) {
                      System.out.println(arr[i]);
                     
                 }
                  
                  
             }



          }
    


     
}

class Student {
          String name;
        int age;
        public Student(String name,int age) {
            this.name=name;
            this.age = age;
        }

    @Override
    public String toString() {
        return  name + " " + age;
    }
        
}

发表于 2019-03-23 18:06:46 回复(1)
//很懵,同样的数据在本地没问题,在线就是 没有数据输出。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.Exception;

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
        
        int mid;String midStr;
        int i = 0;
         
        int length = Integer.parseInt(sc.readLine());
        int type = Integer.parseInt(sc.readLine());
        
        String[] listName = new String[length];
        Integer[] listScore = new Integer[length];
        
        for(i=0;i < length;i++) {    String[] transition = sc.readLine().split(" ");  listName[i] = transition[0];  listScore[i] = Integer.parseInt(transition[1]);     
        }
        
        //bubbleSort
        if(type == 0){  for(i = 0;i<length-1;i++)  for(int j = length - 1;j > i;j--){   if(listScore[j] > listScore[j-1]){
                    mid = listScore[j];
                    listScore[j] = listScore[j-1]; 
                    listScore[j-1] = mid;

                    midStr = listName[j];
                    listName[j] = listName[j-1];
                    listName[j-1] = midStr;
                }  }
        }else if(type == 1){  for(i = 0;i<length-1;i++)  for(int j = length - 1;j > i;j--){   if(listScore[j] < listScore[j-1]){
                    mid = listScore[j];
                    listScore[j] = listScore[j-1]; 
                    listScore[j-1] = mid;

                    midStr = listName[j];
                    listName[j] = listName[j-1];
                    listName[j-1] = midStr;
                }  }
        }  for(i=0;i<length;i++)   System.out.println(listName[i] + " " + listScore[i]);  sc.close(); 
     }
}


编辑于 2019-03-01 22:06:53 回复(0)
import java.util.*;
import java.util.Map.Entry;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int nums = Integer.valueOf(sc.nextLine());
            int sort = Integer.valueOf(sc.nextLine());
            Map<String,Integer> tmap = new TreeMap<>();
            for(int i=0;i<nums;i++){
                String str = sc.nextLine();
                int spIndex = str.indexOf(" ");
                tmap.put(str.substring(0,spIndex),Integer.valueOf(str.substring(spIndex+1)));
            }
            List<Map.Entry<String,Integer>> list = new ArrayList<>(tmap.entrySet());
            if(sort==1){
                Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                    public int compare(Entry<String, Integer> o1,
                            Entry<String, Integer> o2) {
                        return o1.getValue().intValue() > o2.getValue().intValue() ? 1:-1;
                    }
                });
            }else{
                Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                    public int compare(Entry<String, Integer> o1,
                            Entry<String, Integer> o2) {
                        return o1.getValue().intValue() > o2.getValue().intValue() ? -1:1;
                    }
                });
            }
            for(Map.Entry<String,Integer> maps : list){
                System.out.println(maps.getKey()+" "+maps.getValue());
            }
        }
    }
}
eclipse测试是通过了,在这咋通不过,求高手解答,思路是用map接收键值对(name—value),把map转成list进行值排序(定义了两个匿名内部类有点难看),排序后再输出。
发表于 2018-08-03 17:10:32 回复(0)
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

class Student {
    private String name;
    private int grade;

    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public int getGrade() {
        return grade;
    }

    public String toString() {
        return name + " " + grade;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int sort_type = scan.nextInt();
            Student[] arr = new Student[n];
            for (int i = 0; i < arr.length; i++) {
                String name = scan.next();
                int grade = scan.nextInt();
                arr[i] = new Student(name, grade);
            }
            //sort_type为0则降序
            if (sort_type == 0) {
                Arrays.sort(arr, new Comparator<Student>() {
                    @Override
                    public int compare(Student o1, Student o2) {
                        return o2.getGrade() - o1.getGrade();
                    }
                });
            } else if (sort_type == 1) {//sort_type为1则升序
                Arrays.sort(arr, new Comparator<Student>() {
                    @Override
                    public int compare(Student o1, Student o2) {
                        return o1.getGrade() - o2.getGrade();
                    }
                });
            } else {
                System.out.println("sort_type为0则降序,sort_type为1则升序,请重新输入。");
            }
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i].toString());
            }
        }
    }
}
编辑于 2018-05-28 19:30:01 回复(0)
import java.util.Scanner;
public class Main {
    public static void main (String args[]) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            String c = scanner.nextLine();
            String [][] arr = new String[a][2];
            for(int i=0;i<a;i++)
            {
                for(int j=0;j<2;j++) {
                    arr[i][j]=scanner.next();
                }
            }
            for(int i=0;i<a-1;i++) {
                for(int j=i+1;j<a;j++) {
                    if (Integer.parseInt(arr[i][1])<Integer.parseInt(arr[j][1])) {
                        String temp = arr[i][1];
                        arr[i][1] =arr[j][1];
                        arr[j][1] =temp;                            
                        String temp1 = arr[i][0];
                        arr[i][0] =arr[j][0];
                        arr[j][0] =temp1;
                        }
                    }
                }
            if (b==0) {
                    for(int i=0;i<a;i++) {
                        System.out.println(arr[i][0]+" "+arr[i][1]);
                }
            }
            else {
                for(int i=a-1;i>-1;i--) {
                        System.out.println(arr[i][0]+" "+arr[i][1]);
                }
            }
        }
    }
}
 
发表于 2017-11-30 20:21:00 回复(2)
import java.util.Arrays;
import java.util.Scanner;

public class Main {     @SuppressWarnings("resource")     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int studentSum = scanner.nextInt();// 学生总数         int upOrDown = scanner.nextInt();// 成绩上升还是下降         if (upOrDown == 1) {             StudentDown[] studentDown = new StudentDown[studentSum];             for (int i = 0; i < studentSum; i++) {                 String name = scanner.next();                 int score = scanner.nextInt();                 studentDown[i] = new StudentDown(name, score);             }             Arrays.sort(studentDown);             for (StudentDown studentDown2 : studentDown) {                 System.out.println(studentDown2.getName() + " " + studentDown2.getScore());             }         } else if (upOrDown == 0) {             StudentUp[] studentUp = new StudentUp[studentSum];             for (int i = 0; i < studentSum; i++) {                 String name = scanner.next();                 int score = scanner.nextInt();                 studentUp[i] = new StudentUp(name, score);             }             Arrays.sort(studentUp);             for (StudentUp studentDown2 : studentUp) {                 System.out.println(studentDown2.getName() + " " + studentDown2.getScore());             }         }     }
}

class StudentUp implements Comparable<StudentUp> {     public StudentUp(String name, int score) {         super();         this.name = name;         this.score = score;     }     private String name;     private int score;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public int getScore() {         return score;     }     public void setScore(int score) {         this.score = score;     }     @Override     public int compareTo(StudentUp studentUp) {         // TODO Auto-generated method stub         if (this.score < studentUp.score) {             return 1;         } else if (this.score > studentUp.score) {             return -1;         }         return 0;     }

}

class StudentDown implements Comparable<StudentDown> {     public StudentDown(String name, int score) {         super();         this.name = name;         this.score = score;     }     private String name;     private int score;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public int getScore() {         return score;     }     public void setScore(int score) {         this.score = score;     }     @Override     public int compareTo(StudentDown studentDown) {         // TODO Auto-generated method stub         if (this.score < studentDown.score) {             return -1;         } else if (this.score > studentDown.score) {             return 1;         }         return 0;     }

}

发表于 2017-09-29 15:42:10 回复(0)
public class Test011 {
public static int  input(String str){
int num=str.indexOf(' ');
String str1=str.substring(num+1);
char[] ch=str1.toCharArray();
int num1=0;
for(int i=0;i<ch.length;i++){
num1+=(ch[i]-'0')*(int)(Math.pow(10, ch.length-(i+1)));
}
return num1;
}
//升序排列
public static String[] up(String[] str,int[] a){
String ss=new String();
String[] s=str;
for(int i=0;i<str.length-1;i++){
for(int j=i;j<str.length;j++){
if(a[i]>a[j]){
ss=str[i];
str[i]=str[j];
str[j]=ss;
}
}
}
return s;
}
//降序排列
public static String[] down(String[] str,int[] a){
String ss=new String();
String[] s=str;
for(int i=0;i<str.length-1;i++){
for(int j=i;j<str.length;j++){
if(a[i]<a[j]){
ss=str[i];
str[i]=str[j];
str[j]=ss;
}
}
}
return s;
}
public static void text(int num,int flag,String[] str){
int[] stu=new int[num];
String[] aa=new String[num];
for(int i=0;i<stu.length;i++){
stu[i]=input(str[i]);
}
if(flag==0){
aa=down(str, stu);
}else if(flag==1){
aa=up(str, stu);
}
for(int i=0;i<aa.length;i++){
System.out.println(aa[i]);
}
}
public static void main(String[] args,int num,int flag,String[] str) {
text(num, flag, str);

}
}

明明没什么错啊,为什么编译的时候不通过,郁闷
发表于 2017-07-27 13:14:28 回复(0)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		int h;
		Student sts[];
		
		
		while(sc.hasNext()){
			n = Integer.parseInt(sc.nextLine());
			h = Integer.parseInt(sc.nextLine());	
			sts = new Student[n];
			for(int i = 0;i<n;i++){
				String s[]= sc.nextLine().split(" ");
				int score = Integer.parseInt(s[1]);
				String name = s[0];
				sts[i] = new Student(name,score);
			}
			InsertSort iss = new InsertSort();
			if(h==1){
                sts = iss.sort(sts);
            }else{
                 sts = iss.sort2(sts);
            }
			
			//if(h == 1){
				for(int i = 0;i<n;i++){
					System.out.println(sts[i].getName()+" "+sts[i].getScore());
				}
			//}else{
				//for(int i = n-1;i>=0;i--){
				//	System.out.println(sts[i].getName()+" "+sts[i].getScore());
				//}
			//}
			
			
			//n = sc.nextInt();
			//h = sc.nextInt();	
			//sts = new Student[n];
		}

	}

}

class Student{
	private int score;
	private String name;
	public Student(String name,int score){
		this.score = score;
		this.name = name;
	}
	
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}

//拿到一个写好的排序类,哈哈哈插入排序是稳定的,本来想着只升序排,倒着出,结果就。。。搞了半天
class InsertSort {
	public Student[] sort(Student[] arr){
		for( int j = 1; j<arr.length;j++){
			Student temp = arr[j];
			int i = j-1;
			while(i>-1&&temp.getScore()<arr[i].getScore()){
				arr[i+1] = arr[i];
				i--;
			}
			arr[i+1] = temp;
		}
		return arr;
	}
    
    
    public Student[] sort2(Student[] arr){
		for( int j = 1; j<arr.length;j++){
			Student temp = arr[j];
			int i = j-1;
			while(i>-1&&temp.getScore()>arr[i].getScore()){
				arr[i+1] = arr[i];
				i--;
			}
			arr[i+1] = temp;
		}
		return arr;
	}
}


发表于 2017-04-22 20:14:43 回复(0)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
 
public class Main{
public static void main(String[] args){
        int i,j;              //相同的变量,定义全局变量可以减少内存的开销
   Main st=new Main();
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){      //关键代码,没有这个会编译不过
int n=sc.nextInt();
int flag=sc.nextInt();
Student[] students=new Student[n];
for( i=0;i<n;i++)
{
String name=sc.next();
int score=sc.nextInt();
      Student student=new Student(name,score);
      students[i]=student;
}
//降序
if(flag==0){
       for(i=1;i<n;i++){
       for(j=0;j<n-i;j++){
if(students[j].getScore()<students[j+1].getScore()){
swap(students,j,j+1);
}
}
}
}  //升序
else {
for( i=1;i<n;i++){
for( j=0;j<n-i;j++){
if(students[j].getScore()>students[j+1].getScore()){
swap(students,j,j+1);
}
}
}}
   for(Student student:students){
System.out.println(student.toString());
   }
}
}
public static void swap(Student[] stu,int x,int d){
Student temp=stu[x];
stu[x]=stu[d];
stu[d]=temp;
}
}
class Student{
private String name;
private int score;
public Student(){
}
public Student(String name,int score){
super();
this.name=name;
this.score=score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString(){
return name+" "+score;
}
}
发表于 2017-03-25 22:05:28 回复(1)
import java.util.*;
class Result implements Comparable{
public String name;
public Integer points;
public Result(String str,Integer in){
name=str;
points=in;
}
@Override
public int compareTo(Object o) {
Result newResult=(Result) o;
return this.points.compareTo(newResult.points);
}
}
public class Main {

public static <T> void reverse(List<T> list){
if(list.size()<=1)
return;
int left=0;
int right=list.size()-1;
while(left<right){
T temp=list.get(left);
list.set(left, list.get(right));
list.set(right, temp);
left++;
right--;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
String temp= scanner.nextLine();
int num = Integer.parseInt(temp);
temp=scanner.nextLine();
int flag=Integer.parseInt(temp);
List<Result>list=new ArrayList<>();
for(int index=0;index<num;index++){
temp=scanner.nextLine();
String strs[]=temp.split(" ");
Main main=new Main();
Result result = new Result(strs[0],Integer.parseInt(strs[1]));
list.add(result);
}
if(flag==0){
Collections.reverse(list);
}
Collections.sort(list);
if(flag==1)
for(Result r : list)
System.out.println(r.name+" "+r.points);
else{
Result[] keys = (Result[]) list.toArray(new Result[list.size()]);
for(int index=list.size()-1;index>=0;index--){
System.out.println(keys[index].name+" "+keys[index].points);
}
}
}
}

}

发表于 2017-02-05 20:52:38 回复(0)
求大神求解  加粗  就是只执行了一次   我在 本机都运行的

import java.util.*;

public class Main {
static int sor;

public static void main(String[] args) {
new Main().MySort();
}

public void MySort() {

Scanner input = new Scanner(System.in);
int num = input.nextInt();
sor = input.nextInt();
List<Use> tree = new ArrayList<Use>(num);

for (int i = 0; i < num; i++) {
String name = input.next();
int scoren = input.nextInt();
                        tree.add(new Use(name, scoren));
}
Collections.sort(tree);
for (Use use : tree) {
System.out.println(use.name + " " + use.score);
}
}

static class Use implements Comparable<Use> {
private String name;
private int score;

public Use(String name, int score) {
this.name = name;
this.score = score;
}

public int compareTo(Use o) {
if (sor == 0) {
return o.score - this.score;
} else {
return this.score - o.score;
}
}
}
}

case通过率为0.00%
你的代码仅仅处理了一个测试用例,没有循环处理多个测试用例。
比如对于求解A+B的和的题目,需要按照以下代码来处理
正确代码:

发表于 2016-10-24 21:52:21 回复(0)