ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

华为机试-HJ68 成绩排序

2022-07-14 10:03:03  阅读:182  来源: 互联网

标签:int minscore 50 华为 num 70 机试 成绩 HJ68


日常刷题记录,欢迎讨论交流。

目前暂时想到的一种偷懒解法,持续更新。

 

牛客网题目链接:https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

 

描述

给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩

都按先录入排列在前的规则处理。

例示:
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代表从低到高   数据范围:人数:1≤n≤200  进阶:时间复杂度:O(nlogn) ,空间复杂度:O(n) 

输入描述:

第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开

输出描述:

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

示例1

输入:
3
0
fang 90
yang 50
ning 70
输出:
fang 90
ning 70
yang 50

示例2

输入:
3
1
fang 90
yang 50
ning 70
输出:
yang 50
ning 70
fang 90
  解法一:
 1 import java.util.Scanner;
 2 
 3 //解题思路:空间换时间,非最优,假设成绩最高100分,用字符串二维数组的行号表示分数,列按照顺序存储相同分数的不同记录
 4 public class Main {
 5     public static void main(String[] args) {
 6         Scanner sc = new Scanner(System.in);
 7         int num = Integer.parseInt(sc.nextLine());
 8 //         System.out.println(num);
 9         int order = Integer.parseInt(sc.nextLine());
10 //         System.out.println(order);
11         //创建字符串二维数组
12         String[][] arr = new String[101][num]; //字符数组默认为空,列长度最大为num(即所有人成绩都相同的时候)
13         int minscore = 0;
14         int maxscore = 0;
15         while (sc.hasNext()) {
16             String str = sc.nextLine();
17 //             System.out.println(str);
18             String[] strarr = str.split(" ");
19             int score = Integer.parseInt(strarr[1]);
20             for (int i = 0; i < num; i++) {
21                 if (null == arr[score][i]) {
22                     arr[score][i] = str;
23                     break;
24                 }
25             }
26             minscore = Math.min(score, minscore); //记录最低分
27             maxscore = Math.max(score, maxscore); //记录最高分
28         }
29         //遍历数组输出内容
30         if (order == 1) { //升序
31             for (int j = minscore; j <= maxscore; j++) {
32                 for (int k = 0; k < num; k++) {
33                     if (null == arr[j][k]) {
34                         break;
35                     } else {
36                         System.out.println(arr[j][k]);
37                     }
38                 }
39             }
40         } else if (order == 0) { //降序
41             for(int m = maxscore; m >= minscore; m--){
42                 for(int n = 0; n < num; n++){
43                     if(null == arr[m][n]){
44                         break;
45                     }else{
46                         System.out.println(arr[m][n]);
47                     }
48                 }
49             }
50         }
51 
52     }
53 }

 

持续更新中...

 

标签:int,minscore,50,华为,num,70,机试,成绩,HJ68
来源: https://www.cnblogs.com/hsw-CN/p/16476524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有