输入的第一个数n为学生人数。后面跟n行数据,每行包括学号和一个10位的二进制位串,中间用空格间隔。 输出学生的学号和出勤次数,按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。 java
时间: 2023-11-27 22:51:00 浏览: 72
以下是一个实现该功能的 Java 代码示例:
```java
import java.util.*;
public class AttendanceTracker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<String, Integer> attendanceMap = new HashMap<>();
for (int i = 0; i < n; i++) {
String id = sc.next();
String binaryString = sc.next();
int attendanceCount = countAttendance(binaryString);
attendanceMap.put(id, attendanceCount);
}
List<Map.Entry<String, Integer>> attendanceList = new ArrayList<>(attendanceMap.entrySet());
Collections.sort(attendanceList, (a, b) -> {
if (a.getValue() == b.getValue()) {
return a.getKey().compareTo(b.getKey());
}
return b.getValue() - a.getValue();
});
for (Map.Entry<String, Integer> entry : attendanceList) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
private static int countAttendance(String binaryString) {
int attendanceCount = 0;
for (char c : binaryString.toCharArray()) {
if (c == '1') {
attendanceCount++;
}
}
return attendanceCount;
}
}
```
该代码首先读取输入的学生人数,然后逐行读取学生的学号和二进制位串,并统计每个学生的出勤次数。然后将学生的学号和出勤次数存储在一个 `Map` 中,并使用 `Collections.sort()` 方法对 `Map` 的条目进行排序,以便按出勤次数从大到小和学号从小到大的顺序输出学生信息。最后,使用 `countAttendance()` 方法计算每个学生的出勤次数,该方法遍历二进制位串并计算其中的 1 的数量。
阅读全文