java —— 成绩单(用类实现)
题目详情
又考试了,这次考试的人数特别多,考试结束后,成绩统计是一件很重要的事情。
老师们都很关心学生的成绩,于是他们把学生的成绩按学生的姓名进行排列(字典顺序,姓名全为小写字母,从小到大排列),并统计各个分数段的人数,以及满分的同学。
输入格式:
第一行:一个数 n (n<=130000人)
以下n行:每行两个信息,分别为学生姓名(30个字符以内),分数(1~150分)
输出格式:
第一行为1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149各个分数段的人数(空格隔开,没有则输出0 )
接下来的n 行,分别为按照字典序排好的n个学生的姓名和成绩(空格隔开)
再接下来的一行为满分的人的人数x(如果没有则为0)(保证x不超过10000)
接下来的x行为满分人的姓名(如果x为0则为一行‘No’)(按字典序从小到大排序)
注意:一行若有多个数据,每一个数据之间用空格隔开。分数段中没有0分和150分的。
样例:
输入:
3
abc 50
ab 85
bc 55
输出:
0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
ab 85
abc 50
bc 55
0
No
代码如下:
方法一:用ArrayList
public class Student {
private String name;
private int mark;
public Student() {
}
public Student(String name, int mark) {
this.name = name;
this.mark = mark;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setMark(int mark) {
this.mark = mark;
}
public int getMark() {
return mark;
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class StudentTest {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<Student> array = new ArrayList<Student>();
int n = sc.nextInt();
int[] a = new int[16];
int count = 0;
for (int i = 0; i < n; i ++){
addStudent(array);
a[array.get(i).getMark() / 10]++;
if (array.get(i).getMark() == 150)
count ++;
}
for (int i = 0; i < 15;i ++){
if (i == 14)
System.out.println(a[i]);
else System.out.print(a[i] + " ");
}
getStudent(array, count);
}
public static void addStudent(ArrayList<Student> array) { // 添加
Scanner sc = new Scanner(System.in);
Student s = new Student();
String name = sc.next();
int mark = sc.nextInt();
s.setName(name);
s.setMark(mark);
array.add(s);
}
public static void sortStudent(ArrayList<Student> array) { // 比较
for (int i = 0; i < array.size(); i ++) {
for (int j = i + 1; j < array.size(); j ++){
if (array.get(i).getName().compareTo(array.get(j).getName()) > 0){
Student s = array.set(i, array.get(j));
array.set(j,s);
}
}
}
for (int i = 0; i < array.size(); i ++)
System.out.println(array.get(i).getName() + " " + array.get(i).getMark());
}
public static void getStudent(ArrayList<Student> array, int count) { // 找满分
sortStudent(array);
if (count == 0) {
System.out.println(0);
System.out.println("NO");
}else {
System.out.println(count);
for (int i = 0; i < array.size(); i ++){
if (array.get(i).getMark() > 149)
System.out.print(array.get(i).getName() + " ");
}
}
}
}
方法二:用本身数组
import java.util.Scanner;
public class StudentTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[16];
int count = 0;
Student[] array = new Student[n];
for (int i = 0; i < n; i++) {
array[i] = addStudent();
if (array[i].getMark() == 150)
count ++;
a[array[i].getMark() / 10] ++;
}
for (int i = 0; i < 15; i++) {
if (i == 14)
System.out.println(a[i]);
else System.out.print(a[i] + " ");
}
getStudent(array, count);
}
public static Student addStudent() {
Scanner sc = new Scanner(System.in);
Student s = new Student();
String name = sc.next();
int mark = sc.nextInt();
s.setName(name);
s.setMark(mark);
return s;
}
public static void sortStudent(Student[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i].getName().compareTo(array[j].getName()) > 0) {
Student s = array[i];
array[i] = array[j];
array[j] = s;
}
}
}
for (int i = 0; i < array.length; i++)
System.out.println(array[i].getName() + " " + array[i].getMark());
}
public static void getStudent(Student[] array, int count) {
sortStudent(array);
if (count == 0) {
System.out.println(0);
System.out.println("NO");
} else {
System.out.println(count);
for (int i = 0; i < array.length; i++) {
if (array[i].getMark() > 149)
System.out.print(array[i].getName() + " ");
}
}
}
}