统计班级中的说谎者
题目描述
在小C的班级里,有N个学生,每个学生的成绩是A_i。小C发现了一件 有趣的事:当且仅当某个学生的成绩小于或等于自己的有更多人时,这 个学生会说谎。换句话说,如果分数小于等于他的学生数量大于比他分 数高的学生数量,则他会说谎。 现在,小C想知道班里有多少个学生会说谎。 测试样例 样例1: 输入:A=[100,100,100] 输出:3 样例2: 输入:A =[2,1,3] 输出: 2 样例3: 输入:A=[30,1,30,30]输出:3 样例4: 输入:A=[19,27,73,55,88]输出:3
题目解析
这道题的思路也很明确
-
遍历每个学生的成绩:
首先,需要使用一个外层循环来逐个访问班级中每个学生的成绩。这个循环将确保我们对每一个学生都进行一次分析。在 python 中,如果成绩数组名为
A,可以使用类似for i in range(len(A)):的语句来启动外层循环,其中i表示当前正在处理的学生在数组中的索引。在每次外层循环迭代时,我们就可以针对当前索引对应的学生成绩进行后续的分析操作。 -
对于每个学生的成绩,再次遍历所有学生的成绩,统计比当前学生成绩高的学生数量 (
dayu) 和比当前学生成绩低或相等的学生数量 (xiaoyu) :当外层循环定位到某个学生成绩
A[i]时,启动内层循环来遍历整个成绩数组A,以便统计相关数量。在内层循环中,对于每个学生成绩A[j](j表示内层循环中的索引),需要进行比较判断。如果
A[j] > A[i],则说明学生j的成绩高于当前正在分析的学生i的成绩,此时将记录高于当前学生成绩的数量的变量dayu加 1。例如,可以使用类似if A[j] > A[i]: dayu += 1的代码来实现。如果
A[j] <= A[i],则表示学生j的成绩小于等于当前学生i的成绩,相应地将记录小于等于当前学生成绩的数量的变量xiaoyu加 1。代码示例可为if A[j] <= A[i]: xiaoyu += 1。通过这样的内层循环遍历,当内层循环结束时,就能够得到针对当前学生i的dayu和xiaoyu的准确统计值。 -
如果
xiaoyu大于dayu,则认为该学生会说谎,计数器count加一:当针对某个学生的
dayu和xiaoyu统计完成后,需要根据给定的说谎判定规则进行判断。即如果xiaoyu大于dayu,就说明该学生满足说谎的条件。此时,将用于记录说谎学生数量的计数器变量count加 1。可以使用if xiaoyu > dayu: count += 1来实现这一判断和计数操作。 -
最后返回
count:在外层循环完成对所有学生的遍历和分析后,变量
count中存储的就是班级中说谎学生的总数。最后,将这个count值返回,就能得到班级中说谎学生的准确数量。
个人解析
def solution(A):
# Edit your code here
dayu = 0
xiaoyu = 0
count = 0
size = len(A)
for i in range(size):
dayu = 0
xiaoyu = 0
for j in range(size):
if A[j] > A[i]:
dayu += 1
else:
xiaoyu += 1
if xiaoyu > dayu:
count += 1
return count