Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 26
1

Написать процедуру, которая ищет первых N максимальных чисел из массива

30.10.2018, 23:04. Показов 2410. Ответов 6

Написать процедуру, которая ищет первых N максимальных чисел из массива.
Объясню: надо написать такую процедуру, которая ищет N кол-во максимальных чисел в одномерном массиве. N - задается пользователем, массив заполнить случайными числами.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2018, 23:04
Ответы с готовыми решениями:

Написать процедуру, которая ищет первых N максимальных чисел из массива
Сформировать меню вызова функций данной практики по их номеру через switch конструкцию. Результатом...

Написать процедуру и функцию, которая ищет количество положительных чисел в массиве
11) Создать приложение. Написать процедуру и функцию, которая подсчитывает количество положительных...

Разработайте программу, которая содержит процедуру Sum(N,S), которая находит сумму N первых натуральных и найти сумму первых 10,20 чисел
PASCAL Помогите пожалуйста! Решите, заранее спасибо! Разработайте программу, которая содержит...

Написать процедуру нахождения количества максимальных элеметнов массива
Написать процедуру нахождения кол-ва максимальных элеметнов массива

6
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
30.10.2018, 23:35 2
pogen, здравствуйте! Вот программа:

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
#include <iostream>
#include <queue>
#include <set>
#include <algorithm>
#include <ctime>
#include <cstdlib>
 
    using namespace std;
    
void f(int* arr, int size, int n) {
    priority_queue<int> queue; 
    set<int> s; 
    for (int i = 0; i < size; i++) {
        if (s.find(arr[i]) == s.end()) { 
            queue.push(arr[i]); 
            s.insert(arr[i]);
        }
    }
    for (int i = 0; i < n; i++) { 
        cout << queue.top() << " "; 
        queue.pop();
    }
}
  
int main() {
    srand(time(NULL));
    int n, m; 
    cout << "Enter an array size:\n";
    cout << "m = ";
    cin >> m; 
    int* arr = new int[m]; 
    cout << "A random array:\n";
    for (int i = 0; i < m; i++) {
        arr[i] = -50 + rand() % 101; //[-50; 50]
        cout << arr[i] << " "; 
    }
    cout << "\nEnter a number:\n";
    cout << "n = ";
    cin >> n; 
    cout << "Output of the program:\n";
    f(arr, m, n);
    delete [] arr; 
    system("pause"); 
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 26
31.10.2018, 00:03  [ТС] 3
Fixer_84, а как будет выглядеть код, если оставить только две библиотеки - #include <iostream>, #include <ctime>. Просто остальные мы не проходили еще, напишите код только с этими библиотеками, спасибо!
0
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
31.10.2018, 00:08 4
Вот небольшая поправка к коду. А без этих библиотек я напишу уже не сегодня.

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
#include <iostream> 
#include <queue> 
#include <set> 
#include <algorithm> 
#include <ctime> 
#include <cstdlib>
 
    using namespace std;
 
void f(int* arr, int size, int n) {
    priority_queue<int> queue;
    set<int> s;
    for (int i = 0; i < size; i++) {
        if (s.find(arr[i]) == s.end()) {
            queue.push(arr[i]);
            s.insert(arr[i]);
        }
    }
    if (n <= queue.size()) {
        for (int i = 0; i < n; i++) {
            cout << queue.top() << " ";
            queue.pop();
        }
    } else {
        cout << "No such amount of maximums!\n";
    }
}
 
int main() {
    srand(time(NULL));
    int n, m;
    cout << "Enter an array size:\n";
    cout << "m = ";
    cin >> m;
    int* arr = new int[m];
    cout << "A random array:\n";
    for (int i = 0; i < m; i++) {
        arr[i] = -50 + rand() % 101; //[-50; 50]
        cout << arr[i] << " ";
    }
    cout << "\nEnter a number:\n";
    cout << "n = ";
    cin >> n;
    cout << "Output of the program:\n";
    f(arr, m, n);
    delete[] arr;
    system("pause");
    return 0;
}
0
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
31.10.2018, 01:42 5
Цитата Сообщение от Fixer_84 Посмотреть сообщение
void f(int* arr, int size, int n)
зачем там очередь ? не понял что-то.
тоже самое ведь?
C++
1
2
3
4
5
6
7
8
void f(int* arr, int size, int n) {
 
    set<int> s(arr, arr+ size);
    auto rit = s.rbegin();
    for (int i = 0; i < n && rit != s.rend(); ++i, ++rit) {
        cout << *rit << " ";
    }
}
0
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
31.10.2018, 01:54 6
Лучший ответ Сообщение было отмечено pogen как решение

Решение

pogen, вот только с помощью <iostream> и <ctime>:

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
#include <iostream> 
#include <ctime>
 
    using namespace std;
    
void f(int* arr, int size, int n) {
    for (int i = 0; i < size; i++)
        for (int j = size - 1; j > i; j--)
            if (arr[j] > arr[j-1])
                swap(arr[j], arr[j-1]);
    int k = 0;
    for (int i = 0; i < size - 1; i++) {
        if (arr[i+1] != arr[i]) {
            k++;
            if (k == n) break;
            if (k == 1) cout << arr[i] << " " << arr[i+1] << " ";
            else cout << arr[i+1] << " ";
        }
    }
}
 
int main() {
    srand(time(NULL));
    int n, m;
    cout << "Enter an array size:\n";
    cout << "m = ";
    cin >> m;
    int* arr = new int[m];
    cout << "A random array:\n";
    for (int i = 0; i < m; i++) {
        arr[i] = -50 + rand() % 101; //[-50; 50]
        cout << arr[i] << " ";
    }
    cout << "Enter a number:\n";
    cout << "n = ";
    cin >> n;
    cout << "Output of the program:\n";
    f(arr, m, n);
    delete [] arr;
    system("pause");
    return 0;
}
1
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
31.10.2018, 18:10 7
зачем там очередь ? не понял что-то.
JaponDemon, здравствуйте. Да, уже поздно было и я не подумал. Можно просто множеством обойтись, но тогда массив сортировать надо. А у меня сразу в priority_queue без повторов записывается.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2018, 18:10

Cоздать процедуру, которая ищет слово в массиве и выводит набор индексов массива совпадающих элементов
Имеется массив слов.Необходимо создать процедуру,которая ищет в массиве, переданное в параметре...

Составить процедуру, которая выводит квадраты первых 40 чисел в виде таблицы
Составить процедуру, которая выводит квадраты первых 40 чисел в виде таблицы (в каждой строке 4...

Шаблоны: написать функцию, которая ищет произведение среди двух, трех и четырех целых и действительных чисел
Написать функцию dob, которая ищет произведение среди двух, трех и четырех целых и действительных...

С помощью оператора while написать программу, которая ищет произведение 10 произвольно введенных чисел и выводить его на печать
С помощью оператора while написать программу, которая ищет произведение 10 произвольно введенных...


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

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

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