Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
 Аватар для Melvil
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256

Определить какое наибольшее число подряд идущих элементов последовательности равны друг другу

05.08.2015, 20:40. Показов 5781. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, решил задачку, но выдаёт ошибку на пятом тесте. У меня два вопроса: Есть ли более простой способ решения и, собственно, помогите найти ошибку.

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

Входные данные

Входной файл INPUT.TXT содержит последовательность неотрицательных целых чисел, не превышающих значения 100. Гарантируется, что во входных данных не более 100 чисел и среди них есть хотя бы одно число 0.

Выходные данные

В выходной файл OUTPUT.TXT выведите целое число – ответ на задачу.


Мой вариант:

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
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    int value;
    int max = -10000;
    int pro = 0;
    int counter = 0;
    vector<int>csave(100);
    string s;
    getline(cin, s); // Сам ввод
    stringstream in(s);
    while (in >> value)
    {
        int i = 0;
        if (value == pro)
        {
            counter += 1;
            csave[i] = counter;
        }
        else if (value == 0)
        {
            break;
        }
        else if (value != pro)
        {
            counter = 0;
            i++;
        }
        pro = value;
    }
    for (int i = 0; i < csave.size(); i++)
    {
        if (csave[i] > max)
            max = csave[i];
    }
    cout << max + 1 << endl;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2015, 20:40
Ответы с готовыми решениями:

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

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

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

17
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
05.08.2015, 21:07
Melvil, легко же.
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#include <iostream>
 
int main()
{
    std::vector<int> array = { 1, 1, 3, 4, 4, 3, 5, 5, 5, 1, 3 };
 
    int count = 1, max = 1;
    for (int i = 1; i < array.size(); ++i)
        if (array[i - 1] == array[i])
            count++;
        else {
            max = count > max ? count : max;
            count = 1;
        }
    std::cout << max;
 
    std::cin.ignore();
    return 0;
}
0
 Аватар для Melvil
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
05.08.2015, 23:41  [ТС]
Цитата Сообщение от tnk500 Посмотреть сообщение
Melvil, легко же.
Дело в том, что это решение неверно. Вы не учитываете возможность ввода нуля, а после него символов, как сказано в условии, вообще зачем здесь cin.ignore() ?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
05.08.2015, 23:55
Melvil, так после 0,все символы должны игнорироваться,в чем проблема?
0
 Аватар для Melvil
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
06.08.2015, 00:36  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
так после 0,все символы должны игнорироваться,в чем проблема?
Именно этого я и не увидел в предыдущем коде. Решение:

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
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
using namespace std;
int main()
{
    vector<int>array;
    int count = 1, max = 1, value;
    string s;
    getline(cin, s); 
    stringstream in(s);
    while (in >> value)
    {
        array.push_back(value);
    }
    for (int i = 1; i < array.size(); ++i)
        if (array[i - 1] == array[i])
        count++;
        else 
        {
            max = count > max ? count : max;
            count = 1;
            if (array[i] == 0)
                break;
        }
        cout << max << endl;
        return 0;
}
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
06.08.2015, 00:43
Цитата Сообщение от Melvil Посмотреть сообщение
Именно этого я и не увидел в предыдущем коде. Решение:
понимаете,здесь принято помогать,а не делать всю работу за вас. В исходном посте вы не акцентировали внимание на конкретной проблеме,так что tnk500 справедливо привел код для одной из подзадач.
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
06.08.2015, 09:24
Melvil, интересно, что вы забыли в программировании на С++, если не можете заменить шестую строку определением вектора и циклом с поэлементным вводом?

Нужна проверка до нуля? for(int i = 1; i < array.size() && array[i - 1]; ++i) ...;

вообще зачем здесь cin.ignore()
Чтобы консолька не обижалась и не уходила от нас так быстро, что прочесть данные в ней не удавалось
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
06.08.2015, 09:40
Цитата Сообщение от tnk500 Посмотреть сообщение
Чтобы консолька не обижалась и не уходила от нас так быстро, что прочесть данные в ней не удавалось
Вы наверное с std::cin.get() перепутали.
0
3 / 3 / 5
Регистрация: 20.05.2014
Сообщений: 12
06.08.2015, 09:53
Лучший ответ Сообщение было отмечено Melvil как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
int main() {
    int a, b = 1, c = 1, max = 1;
    std::cin >> a;
    if (a) {
        while (b) {
            std::cin >> b;
            if (b == a)
                c++;
            else {
                if (c > max)
                    max = c;
                a = b;
                c = 1;
            }
        }
    }
    std::cout << max;
    return 0;
}
2
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
06.08.2015, 10:32
Цитата Сообщение от Melvil Посмотреть сообщение
выдаёт ошибку на пятом тесте
Пятый тест это когда насыпается круг солью, в него помещается код, и всю ночь тестируется? Или это шестой?

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
#include <iostream>
#include <algorithm>
#include <vector>
 
static int Counter(0);
void Do( int val )
{
  static int CurrCouter(0),
             CurrElem(val);
  if( CurrElem != val )
    {
    CurrElem = val;
    if( CurrCouter >= Counter )
      {
      Counter = CurrCouter;
      CurrCouter = 1;
      }
    }
  else
    CurrCouter++;
}
 
int main()
{
  #define N 10
  int array[N] = { 4, 6, 6, 6, 8, 8, 0, 0, 6, 6 };
  std::vector<int> v( array, array + N );
 
  std::for_each( v.begin(), v.end(), Do );
 
  std::cout << Counter;
 
  std::cin.ignore();
  return 0;
}
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.08.2015, 10:51
Melvil,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    int cur, next, counter = 1, max = 1;
    std::cin >> cur;
    if (cur)
        while (std::cin >> next && next != 0)
            if (cur == next)
                ++counter;
            else
            {
                cur = next;
                max = counter > max ? counter : max;
                counter = 1;
            }
        
    std::cout << max << std::endl;
    
    return 0;
}
Добавлено через 2 минуты

Не по теме:

Dmitriy_73, не буду говорить, у кого мысли сходятся да ещё и практически строчка в строчку :)

1
 Аватар для Melvil
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
06.08.2015, 11:07  [ТС]
Цитата Сообщение от tnk500 Посмотреть сообщение
интересно, что вы забыли в программировании на С++
Вы так обращаетесь ко всем новичкам в программировании? Возможно, лучше было бы объяснить?

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Пятый тест это когда насыпается круг солью, в него помещается код, и всю ночь тестируется?
Если бы я знал сами тесты меня бы здесь не было. Так что скорее всего круг с солью.

И всё же я не понимаю, некоторые решения - зачем выводить Counter и только после этого просить ввод?

C++
1
2
3
std::cout << Counter;
 
  std::cin.ignore();
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
06.08.2015, 11:27
Цитата Сообщение от Melvil Посмотреть сообщение
я не понимаю, некоторые решения
Это остановка программы, пауза. Чтобы консольное окно не закрылось, дав пользователю время ознакомиться с результатом работы программы.
Аналогов масса (тот же system("pause"), у всех свои плюсы и минусы.

Цитата Сообщение от Melvil Посмотреть сообщение
Если бы я знал сами тесты
Ну вы б тогда обмолвились чтоль парой слов что это за тесты, откуда вы их берете. И зачем.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.08.2015, 11:29
Цитата Сообщение от Melvil Посмотреть сообщение
C++
1
std::cin.ignore();
это не ввод, а исключение символа из потока ввода (в данном случае символа новой строки).
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
06.08.2015, 13:06
S_el, нет, не перепутал. Впрочем, они обе задерживают консоль.

Цитата Сообщение от Melvil Посмотреть сообщение
Вы так обращаетесь ко всем новичкам в программировании? Возможно, лучше было бы объяснить?
Простите, раз мои объяснения в том сообщении за объяснения не приняты. Я крепко перед вами виноват. Но совет один дам: в программировании часто имеется решение какой-то общей проблемы, и если частного решения нет - придется самому его описывать. Вам часто придется прибегать к методу научного тыка. Если непонятна функция - тот же cin.ignore(), - удалите строку и посмотрите, что будет. К тому же гугл в этой стране пока не запретили.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
06.08.2015, 14:19
Цитата Сообщение от tnk500 Посмотреть сообщение
нет, не перепутал. Впрочем, они обе задерживают консоль.
нет.Смотрите выше:
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
это не ввод, а исключение символа из потока ввода
подробнее:
http://www.cplusplus.com/refer... am/ignore/
2
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
06.08.2015, 15:11
S_el, так-то да, лучше cin.get() использовать. Эффект от него просто тот же.
Вот реализация ignore (у меня, во всяком случае) :
Кликните здесь для просмотра всего текста
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
_Myt& __CLR_OR_THIS_CALL ignore(streamsize _Count = 1,
        int_type _Metadelim = _Traits::eof())
        {   // ignore up to _Count characters, discarding delimiter
        ios_base::iostate _State = ios_base::goodbit;
        _Chcount = 0;
        const sentry _Ok(*this, true);
 
        if (_Ok && 0 < _Count)
            {   // state okay, use facet to extract
            _TRY_IO_BEGIN
            for (; ; )
                {   // get a metacharacter if more room in buffer
                int_type _Meta;
                if (_Count != INT_MAX && --_Count < 0)
                    break;  // buffer full, quit
                else if (_Traits::eq_int_type(_Traits::eof(),
                    _Meta = _Myios::rdbuf()->sbumpc()))
                    {   // end of file, quit
                    _State |= ios_base::eofbit;
                    break;
                    }
                else
                    {   // got a character, count it
                    ++_Chcount;
                    if (_Meta == _Metadelim)
                        break;  // got a delimiter, quit
                    }
                }
            _CATCH_IO_END
            }
 
        _Myios::setstate(_State);
        return (*this);
        }


У меня есть предположение, что увеличивая счетчик в ветви else, cin "переходит в ожидание" спецсимвола. Подтверждение тому - вызов std::cin.ignore(3). Только при вводе двух символов (+ любой escape-символ) программа завершается.
1
 Аватар для Melvil
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
06.08.2015, 15:21  [ТС]
Всем большое спасибо, разобрался с cin.ignore().
SatanaXIII, Решаю задачи из курса по C++ на одном сайте. Первые два теста даны, остальные неизвестны. Нужно написать программу, скопировать код на сайт и запустить её - она выведет либо Compilation Error, если что-то не так, либо Wrong Answer и номер теста. Остальные тесты неизвестны по той причине, что многие просто могли бы на каждый тест вывести ответ с помощью цикла for и cout.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2015, 15:21
Помогаю со студенческими работами здесь

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

Определить какое наибольшее число подряд идущих купе полностью свободны
В плацкартном вагоне 54 места, пронумерованных числами от 1 до 54. Вагон разбит на 9 купе. Первые 36 мест расположены по левую сторону от...

Определить наибольшее число идущих подряд положительных элементов в массиве
1)Дан массив A из N элементов. Определить наибольшее число идущих подряд положительных элементов в этом массиве. 2)Подсчитать количество...

Определить наибольшее число идущих подряд одинаковых элементов в массиве
Помогите изменить программу. Дана: Определить наибольшее число идущих подряд положительных элементов в массиве А. Необходимо: Дан...

Подсчитать наибольшее число букв «а» идущих подряд в данной последовательности
Решите пожалуйста эти задачи . Очень нужны. 1. Дана последовательность из n символов. Известно, что в последовательности имеется хотя бы...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru