题意:求李明成绩排名在同一组数据中,成绩是累计的,名字可能会出现许多前导空格或者末尾空格,用name=scan.nextLine().trim();消除。
思路:Map题~~Map里装的是名字与,在给出的n个人名中,第几次出现,记得要记下李明的的位置。然后用一个数组装m组成绩,mark[hash.get(scan.nextLine().trim())]+=s;s为成绩,每读完一次成绩。遍历这个数组,找出所有成绩大于李明的(数组中李明成绩的位置即是开始记录下的位置),输出即可。
AC代码:
import java.util.HashMap;
import java.util.Scanner;
public class Main
{
static Scanner scan=new Scanner(System.in);
public static void main(String[] args)
{
HashMap<String,Integer> hash=new HashMap<String,Integer>();
int n=scan.nextInt(),pop=0;
String name=scan.nextLine();
for(int i=1;i<=n;i++)
{
name=scan.nextLine().trim();
if(name.equals("Li Ming")) pop=i;
hash.put(name,i);
}
int mark[]=new int[n+1];
int m=scan.nextInt();
scan.nextLine();
while(m-->0)
{
for(int i=0;i<n;i++)
{
int s=scan.nextInt();
mark[hash.get(scan.nextLine().trim())]+=s;
}
int rank=mark[pop],count=1;
for(int i=1;i<=n;i++)
if(mark[i]>rank)
count++;
System.out.println(count);
}
}
}