在小C的班级里,有 N 个学生,每个学生的成绩是 A_i。小C发现了一件有趣的事:当且仅当某个学生的成绩小于或等于自己的有更多人时,这个学生会说谎。换句话说,如果分数小于等于他的学生数量大于比他分数高的学生数量,则他会说谎。 java实现
时间: 2024-10-24 18:04:49 浏览: 40
这个问题可以转化为找出所有可能的“说谎者”,我们可以使用一个哈希映射(HashMap)来存储每个学生的分数以及与其相等或较小的计数。遍历数组,对于每个学生,检查他们的成绩对应的计数是否满足条件,如果是,则添加到结果列表中。
以下是 Java 中的一个简单实现:
```java
import java.util.*;
public class Main {
public static void findLyingStudents(int[] scores) {
int n = scores.length;
Map<Integer, Integer> counts = new HashMap<>();
for (int score : scores) {
counts.put(score, counts.getOrDefault(score, 0) + 1);
}
List<Integer> liars = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : counts.entrySet()) {
if (entry.getValue() > n - entry.getKey()) { // 检查条件
liars.add(entry.getKey()); // 如果满足,添加到liars列表
}
}
liars.forEach(System.out::println); // 输出说谎的学生成绩
}
public static void main(String[] args) {
int[] scores = {5, 9, 4, 6, 8};
findLyingStudents(scores);
}
}
```
在这个例子中,`findLyingStudents`函数接受一个整数数组 `scores`,并找到那些满足条件的学生的成绩。`counts` 集合存储了每个分数及其出现次数。然后我们检查每个计数,如果超过剩余学生的数量减去该分数(即比该分数高的人的数量),就将分数加入到 `liars` 列表中。
阅读全文