Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
coagulopathy
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 6
#1

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент

08.03.2016, 00:58. Просмотров 744. Ответов 5
Метки нет (Все метки)

1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент. (Серия - группа подряд идущих одинаковых элементов, длина серии - кол-во элементов в серии, может быть равна 1.)
выводит ошибку: vector subscript is out of range. что не так?
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
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, j = 1, t = 0, count = 1,x;
    cout << "Введите размер массива: ";
    cin >> n;
    vector<int> a(n);
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < n; i++) {
        cout << "A[" << i+1 << "]= ";
        cin >> a[i];
    }
    for (int i=1; i <=a.size(); i++) {
        if (a[i] != a[i - 1]) {
            n += 1;
            a.resize(n);
            for (int j = n; j >= i; j--) {
                a[j] = a[j - 1];
                i++;
            }
        }
    }
        cout << "Преобразованный массив: ";
        for (int i = 0; i <a.size(); i++) cout << a[i] << endl;
 
            system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2016, 00:58
Ответы с готовыми решениями:

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент
Помогите преобразовать код из языка С# в С++. Занимался разбором задачи на...

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() {...

Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент
Ребятки, кому не сложно выручите с задачкой) Дан целочисленный массив размера...

Преобразовать массив, уменьшив каждую его серию на один элемент.
Дан целочисленный массив размера N, содержащий по крайней мере одну серию,...

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

5
Juffin
51 / 51 / 24
Регистрация: 24.12.2011
Сообщений: 133
08.03.2016, 01:01 #2
C++
1
2
for (int j = n; j >= i; j--) {
a[j] = a[j - 1];
Ты вот здесь вылезаешь за пределы в первой итерации, потому что обращаешься к a[n].
0
coagulopathy
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 6
08.03.2016, 01:08  [ТС] #3
Цитата Сообщение от Juffin Посмотреть сообщение
C++Выделить код
1
2
for (int j = n; j >= i; j--) {
a[j] = a[j - 1];
объявляю j=n-1. та же ошибка
0
Juffin
51 / 51 / 24
Регистрация: 24.12.2011
Сообщений: 133
08.03.2016, 01:38 #4
Советую тебе печатать размер массива и индекс при каждом обращении:
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
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, j = 1, t = 0, count = 1,x;
    cout << "Введите размер массива: ";
    cin >> n;
    vector<int> a(n);
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < n; i++) {
        cout << "A[" << i+1 << "]= ";
        cin >> a[i];
    }
    for (int i=1; i <=a.size(); i++) {
        cout << "size=" << a.size() << " i=" << i << " i-1=" << i - 1 << endl;
        if (a[i] != a[i - 1]) {
            n += 1;
            a.resize(n);
            for (int j = n - 1; j >= i; j--) {
                cout << "size=" << a.size() << " j=" << j << " j-1=" << j - 1 << endl;
                a[j] = a[j - 1];
                i++;
            }
        }
    }
        cout << "Преобразованный массив: ";
        for (int i = 0; i <a.size(); i++) cout << a[i] << endl;
 
            system("pause");
    return 0;
}
И сразу будет видно, в каком месте ты обращаешься по неправильному индексу.
0
k1n3c7
11 / 11 / 24
Регистрация: 06.03.2016
Сообщений: 53
08.03.2016, 03:41 #5
Добавлено через 1 минуту
Цитата Сообщение от coagulopathy Посмотреть сообщение
Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент (cерия - группа подряд идущих одинаковых элементов, длина серии - кол-во элементов в серии, может быть равна 1.) Иногда неправильно считает, к примеру: ввод: 1 1 2 2 2 3; вывод: 1 1 2 2 2 2 3, хотя должно было вывести 1 1 1 2 2 2 3. В чём проблема?
Программа работает правильно, она увеличивает наибольшую серию на 1. Что не так?
ввод: 1 1 2 2 2 3; вывод: 1 1 2 2 2 2 3, хотя должно было вывести 1 1 1 2 2 2 3.
222 наибольшая серия
0
Aymurat
119 / 111 / 65
Регистрация: 07.11.2014
Сообщений: 753
Завершенные тесты: 6
08.03.2016, 07:19 #6
Цитата Сообщение от coagulopathy Посмотреть сообщение
for (int i = 1; i <= n; i++) {
Массив индексируется с 0.
0
08.03.2016, 07:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2016, 07:19

Преобразовать массив, увеличив последнюю серию наибольшей длины на один элемент
Дан целочисленный массив размера N. Назовем серией группу подряд идущих...

Дан целочисленный массив размера N. Вставить перед каждой его серией элемент с нулевым значением
С++ Дан целочисленный массив размера N. Вставить перед каждой его серией...

Дан массив размера n. Преобразовать его, умножив все положительные элементы на минимальный элемент
Помогите пожалуйста, очень надо.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru