统计班级中的说谎者 | 豆包MarsCode AI刷题

99 阅读3分钟

统计班级中的说谎者

题目描述

在小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

题目解析

这道题的思路也很明确

  1. 遍历每个学生的成绩

    首先,需要使用一个外层循环来逐个访问班级中每个学生的成绩。这个循环将确保我们对每一个学生都进行一次分析。在 python 中,如果成绩数组名为 A,可以使用类似 for i in range(len(A)): 的语句来启动外层循环,其中 i 表示当前正在处理的学生在数组中的索引。在每次外层循环迭代时,我们就可以针对当前索引对应的学生成绩进行后续的分析操作。

  2. 对于每个学生的成绩,再次遍历所有学生的成绩,统计比当前学生成绩高的学生数量 (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。通过这样的内层循环遍历,当内层循环结束时,就能够得到针对当前学生 idayuxiaoyu 的准确统计值。

  3. 如果 xiaoyu 大于 dayu,则认为该学生会说谎,计数器 count 加一

    当针对某个学生的 dayuxiaoyu 统计完成后,需要根据给定的说谎判定规则进行判断。即如果 xiaoyu 大于 dayu,就说明该学生满足说谎的条件。此时,将用于记录说谎学生数量的计数器变量 count 加 1。可以使用 if xiaoyu > dayu: count += 1 来实现这一判断和计数操作。

  4. 最后返回 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