班级排名,成绩排名

班级排名

题目

问题描述

  达达在陶陶的影响下,也对学习慢慢的产生了兴趣。
   他在每次考试之后,都会追着老师问,自己在班级的总名次是多少。考试一多,老师也不耐烦了,于是他给了达达所有人的成绩,让他自己去算出自己的排名。
   可人太多了,达达也无法立即算出来,于是他想让你帮帮他。

输入格式

  第一行为一个整数N,代表班级的学生总数。
   接下来N行,每行一个字符串,代表一个学生的姓名,第一行总是DaDa。
   接下来一行一个整数M,代表一共有M次考试。
   每次考试有N行,每行有以一个空格分隔的一个正整数S和一个字符串P,代表名字为P的学生在这次考试中得了S分。

输出格式

  一共M行,每行一个整数,代表达达在班级里的排名,排名是这一次考试过后的所有考试总分排名,如果达达和别人并列,达达总是排在前面。

样例输入

3DaDa
 A
 B
 2
 49 DaDa
 49 A
 48 B
 80 A
 85 B
 
83 DaDa 【样例输出】
1
2

成绩排名

问题描述

  小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这个问题。

输入格式

  第一行包含一个正整数N,表示有个人参加了考试。接下来N行,每行有一个字符串和一个正整数,分别表示人名和对应的成绩,用一个空格分隔。

输出格式

  输出一共有N行,每行一个字符串,第i行的字符串表示成绩从高到低排在第i位的人的名字,若分数一样则按人名的字典序顺序从小到大。

样例输入

3
 aaa 47
 bbb 90
 ccc 70

样例输出

bbb
 ccc
 aaa 【数据规模和约定】
 人数<=100,分数<=100,人名仅包含小写字母。
package 排序;
import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class 成绩排名 {
		public static Map<String,Integer> map=new TreeMap<>();
		public static Set<Integer> set=new TreeSet<>();
		
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			Scanner sc=new Scanner(System.in);
			int n=sc.nextInt();//几个人参加了考试
			if(n==0)
				System.exit(0);//正常退出
			for(int i=0;i<n;i++){
				String s=sc.next();//输入姓名
				int a=sc.nextInt();//输入考试的成绩
				while(map.containsKey(s))//如果包含了这个姓名
					s=s+1;//就姓名就改为s+1.
				map.put(s,a);//添加位,第几次,并排序
				set.add(a);//添加考试的分数,并排序
			}
			sc.close();
			ArrayList<Integer> list=new ArrayList<Integer>();
			for(int num:set)
				list.add(num);//添加成绩
			for(int i=list.size()-1;i>=0;i--)
				select(list.get(i));
		}

		private static void select(int num) {
			// TODO Auto-generated method stub
			for(String s:map.keySet()){//每个人
				if(map.get(s)==num){//如果成绩相等
					while(s.charAt(s.length()-1)=='1')//最后面的数字为1时
						s=s.substring(0,s.length()-1);//去掉这个人的名字,就不做排名
					System.out.println(s);//除数姓名
				}
			}

	}

}

你可能感兴趣的:(排序,算法,蓝桥)