Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 16

Поиск в массиве: найти 5 наибольших элементов

11.10.2015, 09:53. Показов 4554. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив чисел, в нем найти 5 крупнейших чисел и вывести на экран. Вот мой код, но он не работает правильно, когда вместо 100 написать например 10 на экран выведутся например числа (0,1,2,3,1,4,5,6,9,5) а в результате будет писать что наибольшие числа 9,8,7,6,5 хотя половины этих цифр в массиве нету. Как написать чтобы работало правильно?

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define n 200
int main()
{
  int mas[n],zn,i,j,k, max1,max2,max3,max4,max5, x;
  for(i=0;i<n;++i){
    mas[i] = 0+rand()%100;
    printf("%3d ",mas[i]);}
    printf("\n");
    printf("\n");
    getch(); 
  max1 = mas[0];
  max2 = mas[0];
  max3 = mas[0];
  max4 = mas[0];
  max5 = mas[0];
  for(i=0;i<n;i++){
  if (mas[i]>max1){max1=mas[i];}
}
printf("max1 %3d\n",max1);
for(i=0;i<n;i++)
{
if((mas[i]>max2)&&(mas[i]<max1)){max2=mas[i];}
}
printf("max2 %3d\n",max2);
for(i=0;i<n;i++)
{
if((mas[i]>max3)&&(mas[i]<max2)){max3=mas[i];}
}
printf("max3 %3d\n",max2);
for(i=0;i<n;i++)
{
if((mas[i]>max4)&&(mas[i]<max3)){max4=mas[i];}
}
printf("max4 %3d\n",max2);
for(i=0;i<n;i++)
{
if((mas[i]>max5)&&(mas[i]<max4)){max5=mas[i];}
}
printf("max5 %3d\n",max3);
system ("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2015, 09:53
Ответы с готовыми решениями:

Найти 5 наибольших элементов в двумерном массиве
В двумерном массиве нужно найти 5 наибольших элементов и вывести их на экран с указанием их индексов. Я только начал изучать C++, код...

В исходном массиве найти заданное количество наибольших элементов, из которых составить итоговый массив
Помогите пожалуйста с решением задачи. Дан массив состоящий из 33 элементов типа дабл. Нужно составить второй массив размером 5, где...

Найти три наибольших элемента в массиве
Здравствуйте! Помогите, пожалуйста, с задачей: необходимо найти три наибольших элемента в массиве. Как найти наибольший я понимаю, а вот...

9
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 16
11.10.2015, 10:32  [ТС]
И как уменшить размер етого ?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
11.10.2015, 10:48
Цитата Сообщение от Nachtigall Посмотреть сообщение
Есть массив чисел, в нем найти 5 крупнейших чисел и вывести на экран. Вот мой код, но он не работает правильно, когда вместо 100 написать например 10 на экран выведутся например числа (0,1,2,3,1,4,5,6,9,5) а в результате будет писать что наибольшие числа 9,8,7,6,5 хотя половины этих цифр в массиве нету. Как написать чтобы работало правильно?
Легче же ведь тупо отсортировать его и вывести 5 последних значений:
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
#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    int n;
 
    std::cout << "Enter array size: ";
 
    std::cin >> n;
 
    std::vector<int> vec(n);
 
    std::cout << "Enter " << n << " numbers: ";
 
    for (int i = 0; i < n; ++i)
        std::cin >> vec.at(i);
 
    std::sort(vec.begin(), vec.end());
 
    int count = 5;
 
    for (int i = n; i > n - count; --i)
        std::cout << vec.at(i - 1) << " ";
 
    std::cout << std::endl;
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 16
11.10.2015, 14:21  [ТС]
pav1uxa, Забил дописать, сортировать нельзя))
0
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
11.10.2015, 14:44
Лучший ответ Сообщение было отмечено Nachtigall как решение

Решение

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
#include <bits/stdc++.h>
using namespace std;
const int s = 10;
int a[s], m1, m2, m3, m4, m5;
int main() {
    srand(time(0));
    for (int i = 0;i < s;i++)
        a[i] = rand() % 100;
    m1 = m2 = m3 = m4 = m5 = -1e9;
    for (int i = 0;i < s;i++)
        cout << a[i] << " ";
    cout << endl;
    for (int i = 0;i < s;i++) {
        if (a[i] > m1) 
            m5 = m4, m4 = m3, m3 = m2, m2 = m1, m1 = a[i];
        
        else if (a[i] > m2) 
            m5 = m4, m4 = m3, m3 = m2, m2 = a[i];
        
        else if (a[i] > m3)
            m5 = m4, m4 = m3, m3 = a[i];
        else if (a[i] > m4)
            m5 = m4, m4 = a[i];
        else if (a[i] > m5)
            m5 = a[i];
    }
    cout << m1 << " " << m2 << " " << m3 << " " << m4 << " " << m5;
    return 0;
}
1
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 16
11.10.2015, 14:44  [ТС]
С этим разобрался. Но не могу разобраться почему выводит неправильные максимальные числа
Миниатюры
Поиск в массиве: найти 5 наибольших элементов  
0
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 16
11.10.2015, 14:54  [ТС]
Спасибо

Добавлено через 7 минут
Dimension,
Цитата Сообщение от Dimension Посмотреть сообщение
m1 = m2 = m3 = m4 = m5 = -1e9;
Что здесь означает
Цитата Сообщение от Dimension Посмотреть сообщение
-1e9
?
0
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
11.10.2015, 14:57
Лучший ответ Сообщение было отмечено Nachtigall как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
void find_max(int m[], int k, int a[], int n){
    int t, p = 0;
    for(int i = 0; (i < n) && (p < k); ++i){
        t = 0;
        for(int j = 1; j < n; ++j){
            if((a[j] > a[t]) && (! p || a[j] < m[p - 1]))
                t = j;
        }
        m[p++] = a[t];
    }
}
 
int main(void){
    int a[] = { 0, 8, 2, 3, 1, 4, 5, 6, 9, 5 };
    int m[5];
    find_max(m, 5, a, sizeof(a)/sizeof(a[0]));
    for(int i = 0; i < 5; ++i)
        std::cout << m[i] << ' ';
    std::cout << std::endl;
    return 0;
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
11.10.2015, 15:27
Лучший ответ Сообщение было отмечено Nachtigall как решение

Решение

Nachtigall, вот мой вариант с использованием STL, шаблонными функциями и C++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
#include <iostream>
#include <random>
#include <vector>
#include <algorithm>
 
template <typename T>
void fill_rand(T & arr, const int fromNum, const int toNum)
{
    std::default_random_engine generator;
    std::uniform_int_distribution<int> distribution(fromNum, toNum);
    for (size_t i = 0; i < arr.size(); ++i)
        arr[i] = distribution(generator);
}
 
template <typename T>
void show(const T & arr)
{
    for (auto each_element : arr)
        std::cout << each_element << " ";
    std::cout << "\n\n";
}
 
int main ()
{
    const int ARR_SIZE = 10;
    std::vector<int> varr(ARR_SIZE);
    fill_rand(varr, 10, 99);
 
    show(varr);
 
    const int NUM_QTY = 5;
    for (int i = 0; i < NUM_QTY; ++i)
    {
        std::cout << *std::max_element(varr.begin(), varr.end()) << "\n";
        varr.erase(std::max_element(varr.begin(), varr.end()));
        varr.shrink_to_fit();
    }
 
    return 0;
}
2
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
11.10.2015, 16:24
Цитата Сообщение от Nachtigall Посмотреть сообщение
Что здесь означает
минус десять в девятой степени
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2015, 16:24
Помогаю со студенческими работами здесь

Найти 3 наибольших элемента в массиве целых чисел
Задан массив целых чисел. Найти 3 наибольших элемента в нем.

Bз наибольших элементов каждой строки матрицы построить вектор.найти сумму элементов этого вектора
из наибольших элементов каждой строки матрицы А(4\4) построить вектор.найти сумму элементов этого вектора.Вывести матрицу А и сумму...

Найти 10 наибольших элементов и указать их индексы
в двумерном массиве найдите и выведите на экран 10 наибольших элементов с указанием их индексов?

Найти сумму наибольших из отрицательных элементов матрицы
1. Найти сумму наибольших из отрицательных элементов матрицы А (7х8) и массива В (76). подскажите как делать, плиз

Найти сумму заданного количества наибольших элементов массива
Написать программу решения задачи, используя оператор цикла FOR. Для одномерного массива А (n) найти сумму L крупнейших элементов, где 0...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru