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

В одномерном массиве серию равных элементом заменить на max элемент массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить произведение положительных элементов строки матрицы http://www.cyberforum.ru/cpp-beginners/thread1083342.html
Вычислить произведение положительных элементов строки матрицы. При обнаружении 0 должно выдаваться сообщение «Обнаружен 0». #include <iostream> using std::cin; using std::cout; int...
C++ в чем ошибка? if(data[i]>max_el) /--------------------------------------------------------------------------- #include <iostream.h> #include <vcl.h> #pragma hdrstop ... http://www.cyberforum.ru/cpp-beginners/thread1083340.html
C++ C++ спрайты
Здравствуйте, уважаемые форумчане! Прошу отнестись с пониманием, пытаюсь создать простейшую игрушку, так для себя, изучаю книги, но застопорился на одном моменте (самое начало). Будете смеяться, но...
Поиск файла Dev c++ C++
Как найти нужный файл и скопировать по нужному пути?
C++ Умножить два больших целых числа по правилу умножения "в столбик" http://www.cyberforum.ru/cpp-beginners/thread1083323.html
Умножить два больших целых числа по правилу умножения “в столбик”. Для таких чисел вещественный тип неприемлем, а типа long int недостаточно, так как в числе больше 10 цифр. Для хранения такого...
C++ Вычислить сумму элементов после первого отрицательного элемента Написать программу, которая в одномерном массиве размером n (задается пользователем) 1. вычисляет сумму элементов после первого отрицательного элемента 2. вычисляет произведение элементов после... подробнее

Показать сообщение отдельно
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
28.01.2014, 06:47
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
#include <iostream>
#include <list>
#include <vector>
using namespace std;
 
struct series {
    int beg_i, end_i, count;
};
 
list <series> st_ser;
 
void findGroups(int * a, int n)
{
    int curr_count = 0;
    for (int i = 0; i < n; i++)
    {
        int tmp_beg_ind = i, tmp_end_ind = tmp_beg_ind + 1, tmp_count = 0;
        while ( a[tmp_beg_ind] == a[tmp_end_ind] )
        {
            ++tmp_count, ++tmp_end_ind;
        }
        if (tmp_count > 0 && tmp_count >= curr_count)
        {
            series tmp;
            tmp.beg_i = tmp_beg_ind;
            tmp.end_i = tmp_end_ind - 1;
            curr_count = tmp.count = tmp_count;
            while (!st_ser.empty() && st_ser.back().count < tmp_count) 
                st_ser.pop_back();
            st_ser.push_back(tmp);
        }
    }
}
 
int findMaxElement(int * a, int n)
{
    int max_el = a[0];
    for (int i = 1; i < n; i++)
        if (a[i] > max_el)
            max_el = a[i];
    return max_el;
}
 
void changeElements(int * a, int n, int to_change, vector<int> & res)
{
    int del = 0;
    while (!st_ser.empty())
    {
        vector<int>::iterator it = res.begin() + st_ser.front().beg_i - del;
        *it++ = to_change;
        while (st_ser.front().count-- > 0)
        {
            it = res.erase(it);
            ++del;
        }
        st_ser.pop_front();
    }
}
 
int main()
{
    const int SIZE = 14;
    int arr[SIZE] = {1, 2, 8, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 7}; 
    int max = findMaxElement(arr, SIZE);
    findGroups(arr, SIZE);
    vector <int> resulted_array(arr, arr + SIZE);
    changeElements(arr, SIZE, max, resulted_array);
    for (vector<int>::iterator it = resulted_array.begin(); it != resulted_array.end(); ++it)
        cout << *it << " ";
    cout << endl;
    system("PAUSE");
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru