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

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

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

"Пробег" по массиву. - C++

17.09.2011, 00:07. Просмотров 440. Ответов 4
Метки нет (Все метки)

Здравствуйте!

Стоит следующая задача:

Программе необходимо проверить длину серии одинаковых элементов массива. И вывести максимальную длину серии.
Например, для следующего массива из 20 элементов максимальный пробег будет 5 нулей.

{'0','1','0','1','1','0','0','0','1 ', '1','0','0','0','0','0','1','0', '1','0', '0'}

Мой вариант программы теряет промежуточные величину пробега. Хотел записывать все результаты пробега в массив, а потом выводить максимальный элемент массива. Но что то, не получается.

Пожалуйста, подскажите, как решить эту задачу.

Код
#include <iostream>
#include <conio.h>
#include <clocale>

using namespace std;

int main ()
{
        
        setlocale (LC_ALL, "Russian");
        
        int run0=1;
        int massiv [60] = {0}; // массивов для результатов пробегов
        
        char a[60] = {'0','0','0','0','0','1','1','1','1','0','0','0','0','0','0','0','0','0','0','0',\
        '0','1','1','1','1','1','1','0','0','1','0','0','0','0','0','0','0','0','0','0',\
        '0','0','0','0','0','1','1','0','0','1','0','1','0','1','1','0','0','0','0','0'};
        
        for (int i=1; i<60; i++)
        {
            if (a[i]==a[i-1]) // если два элементы равны
            {
                 run0=run0+1; // увеличиваем пробег
            }
            else
            {
                 /*for (int j=1; j<60; j++)
                 {
                 massiv [j] = run0;
                 cout << massiv [j] <<" "; 
                 } */
            } 
        }    
        
        getch ();
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 00:07     "Пробег" по массиву.
Посмотрите здесь:

Ошибка "Bad allocation" при обращении к массиву - C++
Такая проблема: выбивает bad allocation в 59 строке мейна. Запустите программу, введите 2 числа и выберите &quot;Сложение&quot;, введите &quot;0 1&quot;. ...

При повторном "обращении" к заранее созданному массиву последний элемент отображается неверно - C++
собственно заполняем массив int рандомом через функцию (ну в задании указано - заполнить через функцию, поэтому и такой ход). Потом из...

Ошибка при компиляции, отсутствие ";" перед "*" - C++
Доброго времени суток уважаемые форумчане. Пишу вам с надеждой о помощи. Как и было написано выше, компилятор ругается и не могу понять...

Результаты денежной лотереи подано таблицей выигрышных номеров "А" и таблицей выигрышей в гривне "С", где с (и - C++
Помогите

В тексте заменить слова "компьютер" на "к*******р" - C++
Задача в текстовом файле заменить все слова &quot;компьютер&quot; на &quot;к*******р&quot;. Что-то мучаюсь, не получается... Помогите,...

Заменить слово "кот" на "пес" - C++
Please HELP Заменить в заданной строке первое вхождение слова &quot;кот&quot; на &quot;пес&quot; &quot;Мои кот и пес живут...

Заменить словах каждую букву "о" на "ма" - C++
Заменить словах каждую букву &quot;о&quot; на &quot;ма&quot;. Помогите найти ошибку. После того как ввожу строку выходит не пойми что. #include...

Не работает "setlocale( LC_ALL,"Russian" )" - C++
В одной программе setlocale( LC_ALL,&quot;Russian&quot; ) работает, а в другой, ничем не отличающейся от первой, нет. В чем дело?

Ошибка: namespace "geoo" has no member "ch" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace::std; namespace geoo { double PI = 3.14; double circumf(double...

Удвоить каждую встречающуюся "о" и "а" в строке - C++
помогите с задачами!! 1) Дана строка. Удвоить каждую встречающуюся &quot;о&quot; и &quot;а&quot; 2) Определить количество слов во введенном тексте,...

Вопрос про "Наследование" и "Объединение" - C++
Доброго времени суток. Изучаю ООП, пока что не удачно. Появилось пару вопросиков. первый вид Animals // Млекопитающие class...

Ошибка усечение из "double" к "float" - C++
Обясните пожалуйста что это за ошибка усечение из &quot;double&quot; к &quot;float&quot; никак не могу понять


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.09.2011, 00:47     "Пробег" по массиву. #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
#include <stdio.h>
 
template<typename T>
int match_length(const T* arr, int size, T& value) {
   int  cnt, imax = 0;
   const T*  iter;
   const T*  end  = arr + size;
 
   while(arr != end) {
      for(cnt = 0, iter = arr; *iter == *arr; *iter++, cnt++);
          if(cnt > imax) {
                value = *arr;
                imax  = cnt;
          }
          arr = iter;
    }
    return imax;
}
 
int  main(void) {
    char str[] = { '0','1','0','1','1','0','0','0','1', '1','0','0','0','0','0','1','0', '1','0', '0'};
    char ch;
    int len  = match_length(str, strlen(str), ch);
    printf("(%c) = %d\n", ch, len );
 
    double arr[] = { 777.77, 0.35, 0.35, 7.75, 7.75, 7.75, 23.0 };
    double res;
    len  = match_length(arr, sizeof(arr)/sizeof(double), res);
    printf("(%.2lf) = %d\n", res, len );
 
    getchar();
    return 0;
}
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
17.09.2011, 01:01     "Пробег" по массиву. #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
int main ()
{
        using namespace std;
        const char n = 60;
        int run0 = 1, count = 0;
        char a[n] = {'0','0','0','0','0','1','1','1','1','0','0','0','0','0','0','0','0','0','0','0',\
        '0','1','1','1','1','1','1','0','0','1','0','0','0','0','0','0','0','0','0','0',\
        '0','0','0','0','0','1','1','0','0','1','0','1','0','1','1','0','0','0','0','0'};
        for (int i = 1; i < n ; ++i)
        {
            if (a[i] != a[i-1])
            {
                 ++count; 
            }
        } 
        int *v = new int [count];
        count = 0;
        for (int i = 1; i <= n ; ++i)
        {
            if (a[i] == a[i-1] && i != n)
            {
                 ++run0; 
            }
            else
            {
 
                v[count] = run0;
                run0 = 1;
                ++count;
            }
        } 
        for (int i = 0; i < count; ++i) cout<<v[i]<<endl;
        getch ();
        return 0;
}
snajper_ro
54 / 54 / 17
Регистрация: 14.09.2011
Сообщений: 398
17.09.2011, 01:09     "Пробег" по массиву. #4
ActionScript 3
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
43
44
45
46
47
#include <iostream>
#include <conio.h>
#include <clocale>
 
using namespace std;
 
int main ()
{
        
        setlocale (LC_ALL, "Russian");
        
        int run0 = 1;
        int massiv [60] = {0}; // массивов для результатов пробегов
        
        char a[60] = {'0','0','0','0','0','1','1','1','1','0','0','0','0','0','0','0','0','0','0','0',\
        '0','1','1','1','1','1','1','0','0','1','0','0','0','0','0','0','0','0','0','0',\
        '0','0','0','0','0','1','1','0','0','1','0','1','0','1','1','0','0','0','0','0'};
        
        int period_0 = 0,period_1 = 0, 
            per_max_0= 0, per_max_1 = 0;
        for (int i = 0; i<60; i++)
        {
            if (a[i]== '0') // если два элементы равны
            {
                 if(i != 0 && a[ i - 1] == '1')
                    period_0 = 0;
                     period_0 ++; // увеличиваем пробег
                 if(per_max_0 < period_0)
                     per_max_0 = period_0 ;
                
            }
            else       ////для 1
            {
                if(i != 0 && a[ i - 1 ] == '0' )
                    period_1 = 0;
                     period_1 ++; // увеличиваем пробег
                 if(per_max_1 < period_1)
                     per_max_1 = period_1;
                 
            }
            
        }    
        cout<<"ylalal_ 0 = "<<per_max_0<<endl;
        cout<<"ylalal_1 = "<<per_max_1<<endl;
        getch ();
        return 0;
}// пиши на бумаге думай полчаса над тем как все будет а не сразу кодить
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
17.09.2011, 01:13  [ТС]     "Пробег" по массиву. #5
БОЛЬШОЕ СПАСИБО ВСЕМ ЗА ПОМОЩЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Yandex
Объявления
17.09.2011, 01:13     "Пробег" по массиву.
Ответ Создать тему
Опции темы

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