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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить и вывести на экран в виде таблицы значения функции заданной ряда Тейлора http://www.cyberforum.ru/cpp-beginners/thread690860.html
Помогите написать код, вроде написала, но не работает формула - http://s56.***********/i152/1211/5c/fa5654d888bb.jpg #include <iostream> #include <iomanip> #include <cmath> #include <conio.h>...
C++ Имеется список членов коллектива с указанием принадлежности каждого к различным общественным организациям Имеется список членов коллектива с указанием принадлежности каждого к различным общественным организациям (профком, ученый совет, общество книголюбов, федерация пентикса и т.д.). Напечатать... http://www.cyberforum.ru/cpp-beginners/thread690856.html
C++ Сформировать два массива из исходного: в первый записать отрицательные элементы, во второй – остальные
Сформировать два новых массива из одномерного K: в первый записать отрицательные эле- менты исходного массива, во второй – все остальные. результат вывести на экран
C++ Вычисление суммы ряда
Суммы жду помощи.
C++ Как организовать класс? http://www.cyberforum.ru/cpp-beginners/thread690835.html
Очень хочу сделать класс который заранее не определён, т.е. имена классов и их количество заранее неизвестно =( Щас инициализирую и работаю с классом так: ClassA* OBJ = 0; OBJ = new ClassA();...
C++ Вычислить и вывести на экран в виде таблицы значения функции заданной с помощью ряда Тейлора Задание: Вычислить и вывести на экран в виде таблицы значения функции заданной с помощью ряда Тейлора на интервале от xn до xk с шагом dx и точностью е.... подробнее

Показать сообщение отдельно
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127

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

07.11.2012, 12:31. Просмотров 257. Ответов 0
Метки (Все метки)

С задачей справился, но , есть косяки, например:
- Если имеется дек с числами 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 ();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru