Форум программистов, компьютерный форум CyberForum.ru

Найти первые три максимальных эллемента - C++

Восстановить пароль Регистрация
 
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
07.11.2012, 12:31     Найти первые три максимальных эллемента #1
С задачей справился, но , есть косяки, например:
- Если имеется дек с числами 1 3 9 0 9 5, max1 будет равен 9, max2 = 5, max3 = 3. Хотелось бы, чтоб max2 был равен 9, а max3 соответственно 5.
- Еще не мало важный косяк, приходится бегать три раза по деку, за первый проход, я нахожу только первый максимальный, за второй проход второй максимальный и тп.

Если возможно, предложите кто нибудь вариант, как найти первые три максимальных эллемента подругому.

Вот сама задача:

Из числовой последовательности найти удалить все элементы, меньшие, чем A*X, где X – среднее арифметическое трех наибольших элементов последовательности, A – задаваемый пользователем коэффициент.

Решать задачу надо обязательно через Deque с использованием STL, а не писать все функции ручками =)

Вот мой код:

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
#include <deque>
#include <conio.h>
#include <stdio.h>
#include <clocale>
#include <LIMITS.H>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"rus");
    deque <int> a;
    int X=0, b;
    int max1, max2, max3;
    int size;
    int n;
    FILE *in;
    puts(" Считывание данных из файла.");
    if((in=fopen("input.txt","r"))==NULL)
    {
        puts(" Не удалось открыть файл");
        getch();
        return 0;
    }
    fscanf(in,"%d",&size);
    printf(" Размер дека : %d\n", size);
    for(int i; i<size;i++)
    {
        fscanf(in, "%d", &n);
        a.push_back(n);
    }
    printf(" Исходный дек: ");
    for(int i=0; i<size; i++)
    {
        printf(" %d ", a[i]);
    }
    max1=INT_MIN;;
    max2=INT_MIN;
    max3=INT_MIN;
    for(int i=0; i<size; i++)
    {
        if(a[i]>max1)
        {
            max1=a[i];
        }
    }
    for(int i=0;i<size;i++)
    {
        if(a[i]<max1 && a[i]>max2)
            {
                max2=a[i];
            }
    }
    for(int i=0; i<size;i++)
    {
        if(a[i]<max1 && a[i]<max2 && a[i]>max3)
        {
            max3=a[i];
        }
    }
    printf("\n Первый максимальный эллемент = %d\n Второй максимальный эллемент = %d\n Третий максимальный эллемент = %d\n ", max1, max2, max3);
    X=(max1+max2+max3)/3;
    printf("Среднее арифметическое = %d", X);
    printf("\n Введите b = ");
    scanf("%d", &b);
    for(int i=0; i<a.size();i++)
    {
        if(a[i]<(b*X))
        {
            a.erase(a.begin()+i);
            i--;
        }
    }
    if(a.empty())
    {
        printf(" Весь дек удален! ");
    }
    for(int i=0;i<a.size();i++)
    {
        printf(" %d ", a[i]);
    }
    getch ();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 12:31     Найти первые три максимальных эллемента
Посмотрите здесь:

C++ Из массива А(n) (n<=15) напечатать первые три отрицательных элемента
как найти три максимальных и три минимальных значения 10 случайных чиселых C++
C++ даны три массива A[6,6], B[6,6],C[6,6]. найти сумму максимальных элементов, расположенных на главной диагонали
C++ Строки (найти и поменять местами пару слов, у которых первые три буквы одного совпадают с...)
C++ найти и поменять местами пару слов, у которых первые три буквы одного совпадают с последними тремя буквами другого (дописать)
C++ Найти три максимальных аэлемента одномерного массива
Дано слово. Переставить первые три и последние три буквы C++
C++ Как удалить первые три элемента в std::vector?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru