Как можно посчитать, сколько элементов в массиве удовлетворяют определенным условиям (C++)?

Я новичок в C++, и мне нужна помощь в основном вопросе. У меня есть набор данных (массив) и задача состоит в том, чтобы посчитать, сколько элементов удовлетворяют заданным условиям.

Компания хранит информацию о возрасте и зарплате своих сотрудников. Нам нужно написать программу, которая подскажет, сколько людей старше L имеют зарплату меньше M.

Вход

Количество работников в первой строке стандартного ввода (0≤N≤100), ограничение по возрасту (1≤L≤100) и ограничение по зарплате (1≤M≤2 000 000), а ниже — возраст одного человека в строке (1≤ K≤100) и оклад (1≤F≤2 000 000).

Выход

В единственной строке стандартного вывода должны быть записаны лица старше L с окладом менее M числа рабочих.

#include <iostream>
using namespace std;
int main()
{
    int N;
    int K;
    int L;
    int F;
    int M;
    cin >> N >> K >> L >> F >> M;
    int arr[N];
    for (int i=0; i<N; ++i)
    {
        cin >> arr[i];
    }
    int DB=0;
    for (int i=0; i<N; ++i)
 {
                 for (int DB; K>L && F<M; DB=DB+1)
                    {


                    }
    }
    cout << DB << endl;
    return 0;
}

Я попытался решить проблему, используя for-loops. Очевидно, что в коде есть принципиальные ошибки. Не могли бы вы помочь мне решить проблему? Является ли приведенный выше код хорошим методом или есть гораздо лучшее решение?

Спасибо за помощь заранее.


person Beginner009    schedule 02.10.2020    source источник
comment
Привет, добро пожаловать в Stack Overflow! Можете ли вы уточнить ввод или привести пример ввода?   -  person lawruble13    schedule 02.10.2020
comment
Если вы не знаете, как поступить, часто бывает полезно разбить проблему на этапы. Например, можете ли вы посчитать количество элементов в массиве? Нет, не тривиальный ответ N. Я имею в виду с вашей настройкой цикла. Подсчитайте количество элементов и добавьте комментарий \\ TO DO: I need to check a condition before counting this element..   -  person JaMiT    schedule 02.10.2020
comment
Стандартная библиотека C++ содержит алгоритм count_if() в заголовке <algorithm>, который подсчитывает количество элементов в диапазоне, удовлетворяющих заданному условию.   -  person Peter    schedule 02.10.2020


Ответы (2)


Это, безусловно, творческий подход к проблеме! Более простой способ приблизиться к этому — пройтись по каждому элементу и проверить, соответствует ли он, следующим образом:

#include <iostream>
using namespace std;
int main(){
  int numWorkers, ageLimit, salaryLimit, matchCount=0;
  cin >> numWorkers >> ageLimit >> salaryLimit;
  for (int i = 0; i < numWorkers; i++){
    int age, salary;
    cin >> age >> salary;
    if (age > ageLimit && salary < salaryLimit){
      matchCount++;
    }
  }
  cout << matchCount << endl;
  return 0;
}
person lawruble13    schedule 02.10.2020

Вот способ сделать это, имейте в виду, что это всего лишь пример, основанный на комментариях к вашему сообщению.

#include <iostream>
#include <vector>
#include <algorithm>

// you need a way to capture the information of age and salary

class Employee
{
public:
  Employee(int age, int salary) : m_age(age), m_salary(salary) 
  {}
  int Salary() const { return m_salary; }
  int Age() const { return m_age; }
private:
  int m_age{0};
  int m_salary{0}; 
};


int main()
{
  // an array of the employees with age and salary, avoid using native arrays
  std::vector<Employee> employees{{21,10000},{22,12000},
                                  {54,54500},{62,60000}, 
                                  {32,32000}};
  // some salary limit or use cin to read in it
  auto salaryLimit = 33000;

  // use count_if to count the number of employees under salary limit
  auto nrOfEmployees = std::count_if(employees.begin(), employees.end(), 
                       [=](const Employee& e){return e.Salary() < salaryLimit;});
  std::cout << nrOfEmployees << std::endl;

  return 0;
}

Если вы хотите попробовать код

https://onlinegdb.com/Sy-qCXN8v

person AndersK    schedule 02.10.2020