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

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

Восстановить пароль Регистрация
 
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
17.09.2011, 00:07     "Пробег" по массиву. #1
Здравствуйте!

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

Программе необходимо проверить длину серии одинаковых элементов массива. И вывести максимальную длину серии.
Например, для следующего массива из 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     "Пробег" по массиву.
Посмотрите здесь:

C++ дано четырехзначное число. если сумма первых 2 цифр=сумме 2 последних, написать "yes", иначе "no"
Кто нибудь делал прогу "Эмулятор клавиш с промежутком времени между "нажатиями""? C++
В одномерном массиве состоящим из "N" вещественных элементов вычислить сумму элемента массива с не четными "N" C++
C++ если не составит труда(при вводе "n" должно создаваться предложение "Мне n год (года)")
C++ при повторном "обращении" к заранее созданному массиву последний элемент отображается неверно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 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
 Аватар для snajper_ro
51 / 51 / 16
Регистрация: 14.09.2011
Сообщений: 368
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     "Пробег" по массиву.
Ответ Создать тему
Опции темы

Текущее время: 11:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru