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

167 阅读2分钟

一、题目解析:统计班级中的说谎者

题目描述:

在小C的班级里,有 N 个学生,每个学生的成绩是 A_i。小C发现了一件有趣的事:当且仅当某个学生的成绩小于或等于自己的有更多人时,这个学生会说谎。换句话说,如果分数小于等于他的学生数量大于比他分数高的学生数量,则他会说谎。

现在,小C想知道班里有多少个学生会说谎。

题目思路

1、题目分析

这是一个统计问题,通过变量num1来统计说谎者的数量,我们需要对班级里所有的同学进行遍历,num2来统计分数小于等于当前学生分数的人数,num3来统计分数大于当前学生分数的人数。

2、算法分析

使用vector自带的size()函数来获得当前学生的数量,使用for循环进行遍历。 num1,num2,num3作为计数器来统计对应的人数。 遍历结束num3即为所求结果。

代码实现

#include <iostream>
#include <vector>
using namespace std;
int solution(std::vector<int> A) {
    // Edit your code here
    int num1=0;//统计说谎人数
    for(int i=0;i<A.size();i++)//对所有的学生的成绩进行遍历
    {
        int num2=0;//统计小于等于当前学生分数的人数
        int num3=0;//统计大于当前学生分数的人数
        int m=0;//利用m再次进行遍历来记录num2,num3的数量
        while(m<A.size())
        {
            if(m==i)//跳过当前学生自己
            {
            m++;
            }
            if(A[m]<=A[i])
            {
                num2++;
            }
            else {
            num3++;
            }
            m++;
        }
        if(num2>=num3)
        {
            num1++;
        }
    }
    return num1;
}

代码详解

利用双层循环,第一层循环来对班级每个学生的成绩进行遍历,来依次进行判断是否为说谎者。 第二层循环再次遍历学生的成绩,通过num2,num3来记录当前小于等于以及大于两部分的各自人数,最后进行比较确定当前学生是否为说谎者。

二、知识总结

1、对于vector的使用,了解vector的函数 2、熟练对数据进行遍历操作 建议初学者认识并且熟练掌握vector的相关函数,学习掌握for循环以及while循环的应用。

三、学习计划,学会利用学习工具

1、可以每天进行刷题训练,通过做题来提高自己的知识掌握程度。 2、利用豆包MarsCode AI来掌握解题思路,扩展自己的知识层面,掌握新知识。 3、对自己没有掌握的题进行整理,找到并且补充自己的薄弱点。