Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
1 / 1 / 2
Регистрация: 14.12.2014
Сообщений: 35
1

Определить длину наибольшей подпоследовательности из подряд идущих нулей

16.12.2014, 19:58. Показов 4433. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана последовательность из 100 целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей.
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
#include "clocale"
#include "time.h"
#include "iostream"
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n = 100;
    int mas[n];
    srand(time(NULL));
    int posl = 0;
    int maxposl = 0;
    int i = 0;
    for (int i = 0; i<n; i++)
    {
        mas[i] = rand() % 3;
        int j = i;
        while (mas[j] == 0)
        {
            posl++;
            j++;
        }
        if (posl > maxposl) maxposl = posl;
        posl = 0;
        i = j;
    }
    for (int i = 0; i<n; i++)
        cout << mas[i] << " ";
    cout << "\r\n";
    cout << "Максимальная последовательность 0 : " << maxposl;
    cout << "\r\n";
    system("PAUSE");
    return 0;
}
не могу понять где ошибка!!!! после каждого нуля он пишет число вне диапазона
Миниатюры
Определить длину наибольшей подпоследовательности из подряд идущих нулей  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2014, 19:58
Ответы с готовыми решениями:

Вывести на экран длину наибольшей последовательности цифр, идущих подряд в строке
2. Задана строка (ввести с клавиатуры), содержащая буквы латинского алфавита и цифры. Вывести на...

Определить наибольшее количество подряд идущих нулей в целочисленном массиве
Здравствуйте! Задание: Дан целочисленный массив A. Определить наибольшее количество подряд идущих...

Определить количество подряд идущих нулей в младших разрядах числа
Дано натуральное число N (N &gt; 9). Определить количество нулей, идущих подряд в младших разрядах...

Одномерный массив. Определить наибольшее количество подряд идущих нулей
Дан целочисленный массив А. Определить наибольшее количество подряд идущих нулей

8
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2014, 21:25 2
while (mas[j] == 0)
заменить на
while (mas[j] == 0 && j < n)
0
1 / 1 / 2
Регистрация: 14.12.2014
Сообщений: 35
16.12.2014, 21:43  [ТС] 3
тоже самое получается

Добавлено через 3 минуты
тоже самое получается
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,719
16.12.2014, 21:43 4
MrGluck, Дело не в этом
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i<n; i++)
    {
        mas[i] = rand() % 3; // проинициализировали i-й элемент 
// в i+1 и т.д. пока еще мусор
        int j = i;
        while (mas[j] == 0) // чему равен mas[j] при j>i????????????????????
        {
            posl++;
            j++; // а где гарантия, что не перелезем через n-1 ???????????????
0
1 / 1 / 2
Регистрация: 14.12.2014
Сообщений: 35
16.12.2014, 22:36  [ТС] 5
можете объяснить в чем ошибка
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
16.12.2014, 22:44 6
Цитата Сообщение от Newermore999 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i<n; i++)
{
    mas[i] = rand() % 3;
    int j = i;
    while (mas[j] == 0)
    {
        posl++;
        j++;
    }
    if (posl > maxposl) maxposl = posl;
    posl = 0;
    i = j;
}
В цикле while проверяется незаполненный массив, а соответственно и мусорные значения. Сначала в отдельном цикле заполните массив, а затем в другом цикле проверяйте последовательности нулей.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
17.12.2014, 00:13 7
Цитата Сообщение от zss Посмотреть сообщение
MrGluck, Дело не в этом
Так у меня как раз проверка для этого случая и вставлена.
0
1 / 1 / 2
Регистрация: 14.12.2014
Сообщений: 35
17.12.2014, 09:42  [ТС] 8
0 2 1 0 1 1 1 2 0 0 2 2 1 2 1 0 1 1 1 2 0 1 0 1 0 0 2 2 1 0 1 0 2 0 2 2 2 2 1 2
1 2 0 2 1 2 2 2 0 1 0 2 2 0 0 1 0 2 2 1 2 2 1 1 0 0 1 0 2 2 1 0 0 2 0 1 0 1 0 1
1 1 0 1 1 0 0 1 2 1 2 2 0 1 2 1 2 0 2 0
Максимальная последовательность 0 : 1
Для продолжения нажмите любую клавишу . . .

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
#include "clocale"
#include "time.h"
#include "iostream"
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n = 100;
    int mas[n];
    srand(time(NULL));
    int posl = 0;
    int maxposl = 0;
    int i = 0;
    for (int i = 0; i<n; i++)
        mas[i] = rand()%3;
    {
        int j = i;
        while (mas[j] == 0 && j < n)
        {
            posl++;
            j++;
        }
        if (posl > maxposl) maxposl = posl;
        posl = 0;
        i = j;
    }
    for (int i = 0; i<n; i++)
        cout << mas[i] << " ";
    cout << "\r\n";
    cout << "Максимальная последовательность 0 : " << maxposl;
    cout << "\r\n";
    system("PAUSE");
    return 0;
}
почему-то он проверяет только первое число
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.12.2014, 09:53 9
Лучший ответ Сообщение было отмечено Newermore999 как решение

Решение

Цитата Сообщение от Newermore999 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i<n; i++)
    mas[i] = rand()%3;
{
    int j = i;
    while (mas[j] == 0 && j < n)
    {
        posl++;
        j++;
    }
    if (posl > maxposl) maxposl = posl;
    posl = 0;
    i = j;
}
А что это такое, точнее меня интересуют первые фигурные скобки

Добавлено через 6 минут
Newermore999,
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 <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int n = 100;
    int mas[n];
    srand(time(NULL));
    int posl;
    int maxposl = 0;
    int i = 0;
    for (int i = 0; i < n; ++i)
        mas[i] = rand()%3;
    for (int i = 0; i < n; ++i)
    {
        posl = 0;
        while (mas[i] == 0 && i < n) 
        {
            ++posl;
            ++i;
        }
        if (posl > maxposl) maxposl  = posl;
    }
    for (int i = 0; i < n; ++i)
    cout << mas[i] << " ";
    cout << "\r\n";
    cout << "Максимальная последовательность 0 : " << maxposl;
    cout << "\r\n";
    system("PAUSE");
    return 0;
}
1
17.12.2014, 09:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2014, 09:53
Помогаю со студенческими работами здесь

Определить длину самой большой последовательности подряд идущих согласных
В строке записаны несколько предложений . Каждое предложение заканчивается точкой, вопросительным...

Определить сколько имеется чисел таких что в их записи не содержится более двух подряд идущих нулей
Задача: среди всех чисел в системе счисления с основанием к(2&lt;=k&lt;=10) определить сколько имеется...

Дана последовательность, требуется найти длину наибольшей возрастающей подпоследовательности
Дана последовательность, требуется найти длину наибольшей возрастающей подпоследовательности. ...

Количество элементов в наиболее длинной подпоследовательности подряд идущих чисел одного знака
ВОТ УСЛОВИЕ ЗАДАЧИ: Вводится последовательность из n целых чисел. Определить количество...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru