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

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

Войти
Регистрация
Восстановить пароль
 
 
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
#1

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

05.08.2015, 20:40. Просмотров 1141. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2015, 20:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить какое наибольшее число подряд идущих элементов последовательности равны друг другу (C++):

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

наибольшее число подряд идущих элементов - C++
Задача вроде не сложная, но что-то не так. :( HELP! Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое...

Найти в массиве наибольшее число подряд идущих одинаковых элементов - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include &lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; //#define size 10 using namespace...

Найти в массиве наибольшее число подряд идущих одина*ковых элементов. - C++
Народ надо решить задачку...на простом СИ! Кто поможет буду благодарен... Найти в массиве наибольшее число подряд идущих одина*ковых...

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

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

17
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
05.08.2015, 21:07 #2
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
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
05.08.2015, 23:41  [ТС] #3
Цитата Сообщение от tnk500 Посмотреть сообщение
Melvil, легко же.
Дело в том, что это решение неверно. Вы не учитываете возможность ввода нуля, а после него символов, как сказано в условии, вообще зачем здесь cin.ignore() ?
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
05.08.2015, 23:55 #4
Melvil, так после 0,все символы должны игнорироваться,в чем проблема?
0
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
06.08.2015, 00:36  [ТС] #5
Цитата Сообщение от 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
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
06.08.2015, 00:43 #6
Цитата Сообщение от Melvil Посмотреть сообщение
Именно этого я и не увидел в предыдущем коде. Решение:
понимаете,здесь принято помогать,а не делать всю работу за вас. В исходном посте вы не акцентировали внимание на конкретной проблеме,так что tnk500 справедливо привел код для одной из подзадач.
0
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
06.08.2015, 09:24 #7
Melvil, интересно, что вы забыли в программировании на С++, если не можете заменить шестую строку определением вектора и циклом с поэлементным вводом?

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

вообще зачем здесь cin.ignore()
Чтобы консолька не обижалась и не уходила от нас так быстро, что прочесть данные в ней не удавалось
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,577
06.08.2015, 09:40 #8
Цитата Сообщение от tnk500 Посмотреть сообщение
Чтобы консолька не обижалась и не уходила от нас так быстро, что прочесть данные в ней не удавалось
Вы наверное с std::cin.get() перепутали.
0
Dmitriy_73
3 / 3 / 2
Регистрация: 20.05.2014
Сообщений: 12
Завершенные тесты: 7
06.08.2015, 09:53 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,554
Завершенные тесты: 1
06.08.2015, 10:32 #10
Цитата Сообщение от 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
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
06.08.2015, 10:51 #11
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
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
06.08.2015, 11:07  [ТС] #12
Цитата Сообщение от tnk500 Посмотреть сообщение
интересно, что вы забыли в программировании на С++
Вы так обращаетесь ко всем новичкам в программировании? Возможно, лучше было бы объяснить?

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

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

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

Цитата Сообщение от Melvil Посмотреть сообщение
Если бы я знал сами тесты
Ну вы б тогда обмолвились чтоль парой слов что это за тесты, откуда вы их берете. И зачем.
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
06.08.2015, 11:29 #14
Цитата Сообщение от Melvil Посмотреть сообщение
C++
1
std::cin.ignore();
это не ввод, а исключение символа из потока ввода (в данном случае символа новой строки).
0
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
06.08.2015, 13:06 #15
S_el, нет, не перепутал. Впрочем, они обе задерживают консоль.

Цитата Сообщение от Melvil Посмотреть сообщение
Вы так обращаетесь ко всем новичкам в программировании? Возможно, лучше было бы объяснить?
Простите, раз мои объяснения в том сообщении за объяснения не приняты. Я крепко перед вами виноват. Но совет один дам: в программировании часто имеется решение какой-то общей проблемы, и если частного решения нет - придется самому его описывать. Вам часто придется прибегать к методу научного тыка. Если непонятна функция - тот же cin.ignore(), - удалите строку и посмотрите, что будет. К тому же гугл в этой стране пока не запретили.
0
06.08.2015, 13:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2015, 13:06
Привет! Вот еще темы с ответами:

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

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

Составить программу, которая подсчитывает, наибольшее число отрицательных идущих подряд в массиве чисел - C++
Добрый день,я составил программу по такому условию :&quot;Дан одномерный массив А, состоящий из N целых чисел. Составить программу, которая...

Определить наибольшее число среди нечетных элементов последовательности - C++
Вводится последовательность целых чисел, 0 – конец последовательности. Определить наибольшее число среди нечетных элементов...


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

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

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