zoukankan      html  css  js  c++  java
  • 考研机试 2.成绩排序

     时间:2021/02/21

     一.题目描述

    查找和排序

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

    示例:
    jack      70
    peter     96
    Tom       70
    smith     67

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

    从低到高

    smith     67

    jack      70
    Tom      70
    peter     96

    输入描述

    输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

    输出描述

    按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

    题目链接

     https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1?tpId=40&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

    二.算法

    题解

    该题有多个输入块,对于每个输入块,第一行都是要排序的人数,第二行是排序的方法,之后每行由姓名和成绩组成。所以每次读取输入时都以输入块为单位进行读取,输出时也以输出块为单位进行输出。这里我们分别用names数组和scores数组来存放输入块中姓名和成绩,用相同的下标作为映射关系,所以当我们对成绩进行排序的时候也要对姓名进行相同的排序,这样就可以保证二者之间的映射关系是正确的。

    代码

    import java.util.Scanner;
    
    public class Main{
        
        public static void main(String[] args){
            
            Scanner in = new Scanner(System.in);
            
            while(in.hasNext()){
                int len = in.nextInt();
                int model = in.nextInt();
                String[] names = new String[len];
                int[] scores = new int[len];
                for(int i = 0; i < len; i++){
                    names[i] = in.next();
                    scores[i] = in.nextInt();
                }
            
                if(model == 0){
                    sortDown(names, scores, len);
                }
                else{
                    sortUp(names, scores, len);
                }
            
                for(int i = 0; i < len; i++){
                    System.out.println(names[i] + " " + scores[i]);
                }
            }
        }
        
        public static void sortDown(String[] names, int[] scores, int len){
            
            int flag = 0;
            for(int i = 0; i < len - 1; i++){
                for(int j = len - 1; j > i; j--){
                    if(scores[j] > scores[j-1]){
                        int temp1 = scores[j];
                        scores[j] = scores[j-1];
                        scores[j-1] = temp1;
                        String temp2 = names[j];
                        names[j] = names[j-1];
                        names[j-1] = temp2;
                        flag = 1;
                    }
                }
                if(flag == 0){
                    break;
                }
            }
        }
        
        public static void sortUp(String[] names, int[] scores, int len){
            
            int flag = 0;
            for(int i = 0; i < len - 1; i++){
                for(int j = len - 1; j > i; j--){
                    if(scores[j] < scores[j-1]){
                        int temp1 = scores[j];
                        scores[j] = scores[j-1];
                        scores[j-1] = temp1;
                        String temp2 = names[j];
                        names[j] = names[j-1];
                        names[j-1] = temp2;
                        flag = 1;
                    }
                }
                if(flag == 0){
                    break;
                }
            }
        }
        
    }
  • 相关阅读:
    2013年 积木大赛
    Matlab 画图2
    Matlab 画图1
    Matlab 数值计算
    Matlab 条件循环函数
    Non Super Boring Substring 题解(hash+思维)
    Matlab 数组
    Matlab 矩阵
    L
    hdu 1671Phone List
  • 原文地址:https://www.cnblogs.com/machi12/p/14424312.html
Copyright © 2011-2022 走看看