一、题目解析:统计班级中的说谎者
题目描述:
在小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、对自己没有掌握的题进行整理,找到并且补充自己的薄弱点。