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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
coagulopathy
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 6
#1

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

08.03.2016, 00:58. Просмотров 684. Ответов 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. Преобразовать массив, увеличив каждую его серию на один элемент (C++):

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

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

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

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

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

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

5
Juffin
51 / 51 / 16
Регистрация: 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 / 16
Регистрация: 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 / 14
Регистрация: 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
111 / 105 / 35
Регистрация: 07.11.2014
Сообщений: 732
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

Преобразовать массив, увеличив первую/последнюю/все серии наибольшей длины на один элемент - C++
Вот задача Дан целочисленный массив размера N. Преобразовать массив, увеличив первую1|последнюю2|все3 серии наибольшей длины на один...

2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов - C++
2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов.

Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов - C++
//Дан целочисленный массив размера N. //Найти максимальное количество его одинаковых элементов.

Дан целочисленный массив .Найти его второй по величине элемент - C++
Помогите пожалуйста составить программу. Дан целочисленный массив . Найти его второй по величине элемент.


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

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

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