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

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

Восстановить пароль Регистрация
 
Thisishappi
Сообщений: n/a
28.01.2014, 04:53     В одномерном массиве серию равных элементом заменить на max элемент массива #1
В одномерном массиве группу, содержащую наибольшее число равных элементов, заменить на максимальный элемент этого массива. Элементы массива вводить с клавиатуры.
(т.е. из 1 2 8 3 3 3 4 4 4 5 5 5 5 7 --> 1 2 8 3 3 3 4 4 4 8 7
заменяет все серии а не только самую длинную
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
#include <iostream>
using namespace std;
 
int main()
{
   int n = 10;
   int a[10]; 
   cout << " Vvedite  massiv " << endl;
    for (int i=0; i < n; i++)
        cin >> a[i];
 
    int i_max = 0;
    for (int i = 0; i < n; i++)
        if(a[i] > a[i_max])
            i_max = a[i];
    cout << "Max element = " <<i_max << endl;
 
    for (int i = 0; i < n; i++)
        {
        if (a[i]==a[i+1])
            a[i] = i_max;
        }
    for (int i = 0; i < n; i++)
        cout << a[i];
    
    system("PAUSE");
    return 0;
}
Добавлено через 52 минуты
нужно узнать как определить самую длинную серию и заменить на максимальный элемент
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 04:53     В одномерном массиве серию равных элементом заменить на max элемент массива
Посмотрите здесь:

C++ В одномерном массиве, состоящем из n элементов массива, вычислить минимальный элемент массива
C++ Что-то не хочет пахать :( | Даны два целочисленных массива К(m) и L(n). Найти наибольший элемент массива K, не имеющий себе равных в массиве L.
C++ В одномерном массиве вычислить минимальный по модулю элемент массива
Шаблоны. В одномерном массиве вычислить максимальный по модулю элемент массива. C++
В одномерном массиве вычислить: максимальный элемент массива и сумму элементов массива, расположенных до последнего положительного элемента C++
C++ Каждый отрицательный элемент одномерного массива заменить противоположным по значению элементом
Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением C++
C++ Заменить каждую серию, длина которой больше k, на один наименьший элемент массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
28.01.2014, 06:47     В одномерном массиве серию равных элементом заменить на max элемент массива #2
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;
}
Yandex
Объявления
28.01.2014, 06:47     В одномерном массиве серию равных элементом заменить на max элемент массива
Ответ Создать тему
Опции темы

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