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

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

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

В цикле почему-то проходит по условию только один раз - C++

10.10.2010, 20:49. Просмотров 475. Ответов 3
Метки нет (Все метки)

Задача такая: Дан одномерный массив и натуральных чисел. Удалить из него все тройки подряд идущих равных чисел, и вывести размер полученного массива и его содержимое. Четырёх и более, подряд идущих равных чисел в массиве нет. Дополнительный массив не использовать.
Алгоритм вроде сделал, смотрели с друзьями. Вроде всё правильно, но когда начинаешь проверять. Получается что в одном цикле условие проверяется только один раз.
Например, если массив (10 чисел) такой - 1 1 1 2 3 4 5 6 7 8.
Результат - 7 (кол-во оставшихся чисел) 2 3 4 5 6 7 8. Вроде всё правильно, но если взять другие числа массива
1 2 2 2 3 4 5 6 7 8. результат - 10, 1 2 2 2 3 4 5 6 7 8.
Может быть есть ошибка в алгоритме?
Вот код

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
#include<iostream>
#include<conio.h>
#include<clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int n;
    int i;
    int j;
    cout << "Введите кол-во элементов: ";
    cin >> n;
    int k = n;
    int *d = new int[n];
    cout << "Введите элементы массива:\n";
    for (i = 0; i < n; i++)
        cin >> d[i];
    for (i = 0; i < k - 3; i++)// Проблема в этом цикле
    {
        if (d[i] == d[i+1] == d[i+2])
        {
            for (j = i; j < k - 3; j++)
                d[j] = d[j+3];
                        // cout << "a\n"; - вставлял в качестве индикатора прохождения условия
            k = k - 3;
                        i = i - 1;// нужно чтобы проверился снова этот элемент массива, потому что после сдвига именно с него может начинаться новая тройка равных чисел
        }
    }
    cout << "-------------\n";
    cout << "Размер массива - " << k << "\n";
    for (i = 0; i < k; i++)
        cout << d[i];
    delete d;
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2010, 20:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В цикле почему-то проходит по условию только один раз (C++):

Выбрать из текста только те символы, которые встречаются в нем только один раз - C++
Здравствуйте, помогите пожалуйста написать программу:) Условие. Дана строка, содержащая текст на русском языке. Выбрать из него только те...

Напечатать только те буквы слов, котрые встречаются в обоих словах только один раз - C++
Помогите решить в Borland c++ Если можно еще блок-схему Заданы два слова. Напечатать только те буквы слов, котрые встречаются в...

Напечатать только те буквы слов, которые встречаются в обоих словах только один раз - C++
Пожалуйста помогите!!!!задача на строки на С.Даны 2 слова.Напечатать только те буквы слов,которые встречаются в обоих словах только один...

Как в цикле можно выполнить действие один раз? - C++
Есть цикл, который выполняется n раз. Но 1 действие в этом цикле необходимо выполнить только 1 раз. Как можно это сделать? ...

Цикл выполняется только один раз. - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; struct kvartira { int kolichestvo; int etazh; float...

Как определить переменную только один раз? - C++
Как в функции определить перменную только один раз? Ну чтобы потом при последующих вызовах она не переопределялась, забыл блин, там слово...

3
TheMachinist
243 / 175 / 15
Регистрация: 14.06.2010
Сообщений: 422
10.10.2010, 21:38 #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
#include<iostream>
#include<conio.h>
#include<clocale>
 
using namespace std;
 
int main()
{
        setlocale(LC_CTYPE, "Russian");
        int n;
        int i;
        int j;
        cout << "Введите кол-во элементов: ";
        cin >> n;
        int k = n;
        int *d = new int[n];
        cout << "Введите элементы массива:\n";
        for (i = 0; i < n; i++)
                cin >> d[i];
        for (i = 0; i < k - 3; i++)// Проблема в этом цикле
        {
                if (d[i] == d[i+1] && d[i] ==  d[i+2] )
                {
                       d[i] = d[i+3]; d[i+1] = d[i+4]; d[i+2] = d[i+5];
                       k = k-3;
                       for(j = i+3;j < k;++j)
                           d[j-1] = d[j];
                }
        }
        cout << "-------------\n";
        cout << "Размер массива - " << k << "\n";
        for (i = 0; i < k; i++)
                cout << d[i];
        delete d;
        _getch();
        return 0;
}
1
igor9774
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 12
10.10.2010, 21:53  [ТС] #3
Не совсем правильно работает.
При массиве 1112333456 должен быть результат 4, 2456. А выдаёт 2323

Добавлено через 3 минуты
Работает правильно так:
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
#include<iostream>
#include<conio.h>
#include<clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int n;
    int i;
    int j;
    cout << "Введите кол-во элементов: ";
    cin >> n;
    int k = n;
    int *d = new int[n];
    cout << "Введите элементы массива:\n";
    for (i = 0; i < n; i++)
        cin >> d[i];
    for (i = 0; i < k - 3; i++)
    {
        if (d[i] == d[i+1] && d[i] == d[i+2])
        {
            for (j = i; j < k - 3; j++)
                d[j] = d[j+3];
            k = k - 3;
            i = i - 1; 
        }
    }
    cout << "-------------\n";
    cout << "Размер массива - " << k << "\n";
    for (i = 0; i < k; i++)
        cout << d[i];
    delete d;
    _getch();
    return 0;
}
0
TheMachinist
243 / 175 / 15
Регистрация: 14.06.2010
Сообщений: 422
10.10.2010, 22:03 #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
34
35
36
37
38
#include<iostream>
#include<conio.h>
#include<clocale>
 
using namespace std;
 
int main()
{
        setlocale(LC_CTYPE, "Russian");
        int n;
        int i;
        int j;
        cout << "Введите кол-во элементов: ";
        cin >> n;
        int k = n;
        int *d = new int[n];
        cout << "Введите элементы массива:\n";
        for (i = 0; i < n; i++)
                cin >> d[i];
        for (i = 0; i < k - 3; i++)// Проблема в этом цикле
        {
                if (d[i] == d[i+1] && d[i] ==  d[i+2] )
                {
                       d[i] = d[i+3]; d[i+1] = d[i+4]; d[i+2] = d[i+5];
                       k = k-3;
                      for(int j = i;j < k;++j)
                          d[j] = d[j+3];
                      continue;
                }
        }
        cout << "-------------\n";
        cout << "Размер массива - " << k << "\n";
        for (i = 0; i < k; i++)
                cout << d[i];
        delete d;
        _getch();
        return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2010, 22:03
Привет! Вот еще темы с ответами:

Элементы массива, которые встречаются только один раз - C++
Нужно создать функцию, которая выводит на экран номера элементов, встречающихся в массиве только один раз не знаю как это реализовать...

Найти символы встречающиеся в тексте только один раз - C++
Помогите заданием , плиз) вот условие задание: 15.Задан массив из k символов латинского алфавита. Вывести на экран в алфавитном...

Получить все числа, входящие в последовательность только один раз - C++
Даны массив целых чисел. Получить все числа, входящие в последовательность только один раз.

Вывод числа из файла с двумерным массивом, но только один раз - C++
Здравствуйте. уважаемые форумчане. Имеется такая проблема (в литературе пока решения не встречал и в интернетах тоже). Есть инпут...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
10.10.2010, 22:03
Ответ Создать тему
Опции темы

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