Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
savelyaa
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 6
1

Определить фамилии мужчины и женщины, имеющих самую маленькую зарплату

08.01.2015, 09:12. Просмотров 1072. Ответов 1
Метки нет (Все метки)

Помогите решить задачу.
Известны данные о 20 сотрудниках фирмы (фамилия, зарплата и пол). Определить фамилии мужчины и женщины, имеющих самую маленькую зарплату (считать, что такие есть и они единственные в своей группе сотрудников).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2015, 09:12
Ответы с готовыми решениями:

Определить фамилию женщины, имеющей самую маленькую зарплату
Всем привет проверьте пожалуйста в чем ошибка????? Известны данные о 10...

Определить самую большую отрицательную и самую маленькую положительную температуры
Помогите новичку,первая контрольная по программированию в с++ В массиве T(12)...

Определить самую большую четную и самую маленькую нечетную цифру в матрице и сложить их
Помогите решить задачу:

Определить фамилии абонентов, имеющих задолженность по оплате больше заданной.
Помогите пожалуйста найти ошибку в коде. Ввести массив записей, каждый из...

В массиве найти самую маленькую серию подряд стоящих нечетных элементов... (Как доработать программу?)
Помогите доработать программу В заданном массиве целых чисел найти самую...

1
Melg
539 / 160 / 79
Регистрация: 23.09.2013
Сообщений: 316
08.01.2015, 16:47 2
Лучший ответ Сообщение было отмечено savelyaa как решение

Решение

Вот, пожалуйста, ради Вас написал этот код:
Нужен компилятор с поддержкой с++11.
C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
#include <string>
#include <random>
#include <limits>
#include <algorithm>
 
using Money = long double;
 
enum Gender { Male, Female };
 
std::string GenderToString(Gender g) { return g == Male ? "Male" : "Female"; }
 
struct Employee {
  std::string last_name;
  Money salary;
  Gender gender;
 
  std::string Info() const {
    return "Last name: " + last_name + " Gender: " + StringGender() +
           " Salary: " + std::to_string(salary);
  }
 
  std::string StringGender() const { return GenderToString(gender); }
};
 
struct EmployeeGender {
  EmployeeGender(Gender gender) : kGender(gender) {}
  bool operator()(const Employee &e) { return e.gender == kGender; }
 
 private:
  const Gender kGender;
};
 
struct LessSalary {
  bool operator()(const Employee &first, const Employee &second) {
    return first.salary < second.salary;
  }
};
 
std::vector<std::string> LastNames() {
  return {
      "Alfaro",  "Allan",    "Alonzo",    "Bernal",   "Bernal",   "Bertrand",
      "Bravo",   "Cherry",   "Cooks",     "Corona",   "Devine",   "Drury",
      "Darby",   "Eller",    "Estep",     "Edge",     "Fisk",     "Francis",
      "Frazier", "Gilson",   "Goldsmith", "Guajardo", "Hayward",  "Heck",
      "Heim",    "Irby",     "Isaac",     "Isbell",   "Jeffries", "Jobe",
      "Julian",  "Kendrick", "Kohl",      "Kovach",   "Leggett",  "Logue"};
}
 
template <class URNG>
Gender GenerateRandomGender(URNG &g) {
  std::uniform_int_distribution<int> distribution(0, 1);
  return static_cast<Gender>(distribution(g));
}
 
template <class URNG>
Money GenerateRandomMoney(Money minimum, Money maximum, URNG &g) {
  std::uniform_real_distribution<Money> distribution(minimum, maximum);
  return distribution(g);
}
 
std::string GenerateLastName(const std::vector<std::string> &last_names,
                             size_t index) {
  return last_names.at(index % last_names.size());
}
 
std::string GenerateLastName() {
  static size_t current_name_index = 0;
  return GenerateLastName(LastNames(), current_name_index++);
}
 
template <class URNG>
Employee GenerateRandomEmployee(Money min_salary, Money maxsalary, URNG &g) {
  return {GenerateLastName(), GenerateRandomMoney(min_salary, maxsalary, g),
          GenerateRandomGender(g)};
}
 
class EmployeeGenerator {
 public:
  EmployeeGenerator(const Money &min_salary, const Money &max_salary)
      : kMinSalary(min_salary), kMaxSalary(max_salary) {}
  Employee operator()() {
    return GenerateRandomEmployee(kMinSalary, kMaxSalary, generator);
  }
 
 private:
  const Money kMinSalary;
  const Money kMaxSalary;
  std::default_random_engine generator;
};
 
void ShowString(const std::string &string, std::ostream &stream) {
  stream << string << '\n';
}
 
void ShowAllEmployees(const std::vector<Employee> &employees,
                      std::ostream &ostream) {
  ShowString("List of " + std::to_string(employees.size()) + " employees: ",
             ostream);
  for (const auto &employee : employees) {
    ShowString(employee.Info(), ostream);
  }
  ShowString("-----------", ostream);
}
 
void ShowLowestSalaryEmployee(const Employee &employee, std::ostream &ostream) {
  ShowString(employee.StringGender() + " employee with lowest salary: ",
             ostream);
  ShowString(employee.Info(), ostream);
}
 
void ShowErrorEmployeeWithGenderNotFound(Gender g, std::ostream &ostream) {
  ShowString("There is no " + GenderToString(g) + " empoyee in group", ostream);
}
 
void ShowLowestSalaryForGender(Gender gender,
                               const std::vector<Employee> &employees,
                               std::ostream &ostream) {
  auto employee_with_lowest_salary = std::find_if(
      std::begin(employees), std::end(employees), EmployeeGender(gender));
  if (employee_with_lowest_salary != std::end(employees)) {
    ShowLowestSalaryEmployee(*employee_with_lowest_salary, ostream);
  } else {
    ShowErrorEmployeeWithGenderNotFound(gender, ostream);
  }
}
 
int main() {
  const size_t number_of_employees = 20;
  auto &cout = std::cout;
  std::vector<Employee> employees(number_of_employees);
  std::generate_n(std::begin(employees), number_of_employees,
                  EmployeeGenerator(/*min_salary = */ 1.0,
                                    /*max_salary = */ 1000.0));
  std::sort(std::begin(employees), std::end(employees), LessSalary());
  ShowAllEmployees(employees, cout);
  ShowLowestSalaryForGender(Male, employees, cout);
  ShowLowestSalaryForGender(Female, employees, cout);
  return 0;
}
Пруф работоспособности:

http://ideone.com/ZN7ZoZ

Поскольку никаких ограничений на используемые средства не было, решал как умею.
Решение состоит из нескольких шагов:
1) Сгенерировать набор из 20 разных сотрудников
2) Отсортировать сотрудников по зарплатам
3) Показать список сотрудников для наглядности
4) Показать первого сотрудника из списка, который имеет мужской пол - это мужчина с наименьшей зарплатой, если отсортирован список по возрастанию зарплат
5) Показать первого сотрудника из списка, который имеет женский пол - это женщина с наименьшей зарплатой.

Код является кроссплатформенным и не должен зависеть от компилятора( за исключением поддержки с++11). При решении использовались только средства стандартной библиотеки.
Поскольку ограничения на скорость работы не указаны - оптимизациями специально не занимался.
В общем случае - O(N) на генерацию N сотрудников, O(Nlog(N)) - на сортировку по зарплатам, O(N) на поиск сотрудника заданного пола.

Если Вам понадобятся разъяснения по работе кода - обращайтесь.

Если другие участники форума увидят неточности, ошибки или явные способы улучшить решение - буду рад выслушать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 16:47

Определить самую длинную и самую короткую из введенных строк
Необходимо организовать ввод 3 названия городов. А потом вывести на экран...

Вывести фамилии студентов, имеющих задолженность по двум предметам
Я без-понятия как писать этот код. Если будет у вас свободная минутка,...

Определить их зарплату, определить лучшего менеджера, начислить ему премию, вывести итоги на экран
//Зарплата менеджера составляет 200$ + процент от продаж, продажи до 500$ - 3 %...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru