豆包打卡第四天

48 阅读4分钟

问题描述

班里有 N 个学生,第 i 个学生的分数是 A_i。当且仅当分数 <= A_i 的学生数量多于分数比他高的数量时,第 i 个学生会说谎。求出有多少学生会说谎。

输入格式

  • 输入 N 学生的成绩,包含 A_1, A_2, ..., A_N

输出格式

对于每组数据,输出有多少学生会说谎。

数据范围

  • 1≤N≤1001≤N≤100
  • 0≤Ai≤1000≤Ai​≤100

输入

100 100 100

输出

3

输入

2 1 3

输出

2

输入

30 1 30 30

输出

3

输入

19 27 73 55 88

输出

3

输入

19 27 73 55 88 88 2 17 22

输出

5

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class Main {

    public static int solution(int[] A) {

        // 初始化一个数组来记录每个分数的学生数量

        int[] count = new int[101]; // 因为分数范围是 0 到 100

        // 统计每个分数的学生数量

        for (int score : A) {

            count[score]++;

        }

        int liarCount = 0;

        // 遍历每个学生,计算说谎的学生数量

        for (int i = 0; i < A.length; i++) {

            int score = A[i];

            int lessOrEqualCount = 0;

            // 计算分数小于等于当前分数的学生数量

            for (int j = 0; j <= score; j++) {

                lessOrEqualCount += count[j];

            }

            // 计算分数大于当前分数的学生数量

            int greaterCount = A.length - lessOrEqualCount;

            // 判断当前学生是否说谎

            if (lessOrEqualCount > greaterCount) {

                liarCount++;

MarsCode AI

MarsCode AI

当然可以帮你检查代码。以下是你当前的代码:

java

public class Main {

    public static int 

    solution(int[] A) {

        // Edit your code 

        here

        return 0;

    }

    public static void main

    (String[] args) {

        // Add your test 

        cases here

        System.out.println

        (solution(new int[]

        {100, 100, 100}) == 

        3);

        System.out.println

        (solution(new int[]

        {2, 1, 3}) == 2);

        System.out.println

        (solution(new int[]

        {30, 1, 30, 30}) == 

        3);

        System.out.println

        (solution(new int[]

        {19, 27, 73, 55, 

        88}) == 3);

        System.out.println

        (solution(new int[]

        {19, 27, 73, 55, 

        88, 88, 2, 17, 22}) 

        == 5);

    }

}

代码检查

  1. solution 方法

    • 当前 solution 方法只是返回了 0,这显然不符合题目的要求。你需要实现一个逻辑来计算有多少学生会说谎。
  2. 测试用例

    • 你已经添加了一些测试用例,这很好。确保这些测试用例覆盖了不同的情况,以便验证你的代码是否正确。

建议

  1. 实现 solution 方法

    • 你需要遍历数组 A,对于每个学生,计算分数小于等于该学生分数的学生数量,并与分数大于该学生分数的学生数量进行比较。
    • 如果前者大于后者,则该学生会说谎。
  2. 数据结构选择

    • 你可以使用一个计数器来记录每个分数的学生数量,然后通过遍历数组来计算每个学生的说谎情况。

代码框架

以下是一个代码框架,帮助你开始实现 solution 方法:

java

public class Main {

    public static int 

    solution(int[] A) {

        // 初始化一个数组来记录

        每个分数的学生数量

        int[] count = new 

        int[101]; // 因为分数

        范围是 0 到 100

        // 统计每个分数的学生数

        量

        for (int score : A) 

        {

            count[score]++;

        }

        int liarCount = 0;

        // 遍历每个学生,计算说

        谎的学生数量

        for (int i = 0; i < 

        A.length; i++) {

            int score = A

            [i];

            int 

            lessOrEqualCount

             = 0;

            // 计算分数小于等

            于当前分数的学生数

            量

            for (int j = 0; 

            j <= score; j

            ++) {

                lessOrEqualC

                ount += 

                count[j];

            }

            // 计算分数大于当

            前分数的学生数量

            int 

            greaterCount = 

            A.length - 

            lessOrEqualCount

            ;

            // 判断当前学生是

            否说谎

            if 

            (lessOrEqualCoun

            t > 

            greaterCount) {

                liarCount++;

            }

        }

        return liarCount;

    }

    public static void main

    (String[] args) {

        // Add your test 

        cases here

        System.out.println

        (solution(new int[]

        {100, 100, 100}) == 

        3);

        System.out.println

        (solution(new int[]

        {2, 1, 3}) == 2);

        System.out.println

        (solution(new int[]

        {30, 1, 30, 30}) == 

        3);

        System.out.println

        (solution(new int[]

        {19, 27, 73, 55, 

        88}) == 3);

        System.out.println

        (solution(new int[]

        {19, 27, 73, 55, 

        88, 88, 2, 17, 22}) 

        == 5);

    }

}

解释

  1. 计数数组

    • count 数组用于记录每个分数的学生数量。
  2. 遍历数组

    • 通过遍历数组 A,计算每个学生的说谎情况。
  3. 计算说谎学生数量

    • 对于每个学生,计算分数小于等于该学生分数的学生数量,并与分数大于该学生分数的学生数量进行比较。

解答:public class Main { public static int solution(int[] A) { // 初始化一个数组来记录每个分数的学生数量 int[] count = new int[101]; // 因为分数范围是 0 到 100

    // 统计每个分数的学生数量
    for (int score : A) {
        count[score]++;
    }

    int liarCount = 0;

    // 遍历每个学生,计算说谎的学生数量
    for (int i = 0; i < A.length; i++) {
        int score = A[i];
        int lessOrEqualCount = 0;

        // 计算分数小于等于当前分数的学生数量
        for (int j = 0; j <= score; j++) {
            lessOrEqualCount += count[j];
        }

        // 计算分数大于当前分数的学生数量
        int greaterCount = A.length - lessOrEqualCount;

        // 判断当前学生是否说谎
        if (lessOrEqualCount > greaterCount) {
            liarCount++;
        }
    }

    return liarCount;
}

public static void main(String[] args) {
    // Add your test cases here
    System.out.println(solution(new int[]{100, 100, 100}) == 3);
    System.out.println(solution(new int[]{2, 1, 3}) == 2);
    System.out.println(solution(new int[]{30, 1, 30, 30}) == 3);
    System.out.println(solution(new int[]{19, 27, 73, 55, 88}) == 3);
    System.out.println(solution(new int[]{19, 27, 73, 55, 88, 88, 2, 17, 22}) == 5);
}

}