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

Серии в массиве. - C++

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

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

Тест серии последовательности. Под серией понимается последовательность одинаковых символов (нулей и единиц). То есть подсчитать сначала сколько единиц и нулей, далее сколько раз подряд два нуля и две единицы в массиве , далее сколько раз подряд три нуля и три единицы, далее сколько раз подряд четыря нуля и четыре единицы и так далее до шести. Вывести число серий для каждого диапазона от 1 до 6.

Я написал программу (и она даже вроде правильно работает), но она не очень красивая (опыта у меня очень мало), подскажите более красивый вариант реализации этой задачи.

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

using namespace std;

int main ()
{
    setlocale (LC_ALL, "Russian");
    
    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 run0_1=0, run0_2=0, run0_3=0, run0_4=0, run0_5=0, run0_6=0; 
    int run1_1=0, run1_2=0, run1_3=0, run1_4=0, run1_5=0, run1_6=0; 
    
    // для одного элемента
    for (int i=0; i<60; i++)
    {
        if (A[i]== '0')
        {
           run0_1 = ++run0_1;
        } 
         if (A[i]== '1')
        {
           run1_1 = ++run1_1;
        }       
    }
    // для двух элементов
    for (int i=0; i<60; i++)
    {
        if (A[i]== '0' && A[i]==A[i+1])
        {
           run0_2 = ++run0_2;
        } 
         if (A[i]== '1'&& A[i]==A[i+1])
        {
           run1_2 = ++run1_2;
        }       
    }
    
    // для трех элементов
    for (int i=0; i<60; i++)
    {
        //for (int j=1; j<3; j++){
        if (A[i]== '0' && A[i]==A[i+1] && A[i+1]== A[i+2])
        {
           run0_3 = ++run0_3;
        } 
         if (A[i]== '1'&& A[i]==A[i+1] && A[i+1]== A[i+2])
        {
           run1_3 = ++run1_3;
        }
        //}       
    }
    
     // для четырех элементов
    for (int i=0; i<60; i++)
    {
        //for (int j=1; j<3; j++){
        if (A[i]== '0' && A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3])
        {
           run0_4 = ++run0_4;
        } 
         if (A[i]== '1'&& A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3])
        {
           run1_4 = ++run1_4;
        }
        //}       
    }
    
    // для пяти элементов
    for (int i=0; i<60; i++)
    {
        //for (int j=1; j<3; j++){
        if (A[i]== '0' && A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3] && A[i+3]==A[i+4])
        {
           run0_5 = ++run0_5;
        } 
         if (A[i]== '1'&& A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3] && A[i+3]==A[i+4])
        {
           run1_5 = ++run1_5;
        }
        //}       
    }
    
    // для шести элементов
    for (int i=0; i<60; i++)
    {
        //for (int j=1; j<3; j++){
        if (A[i]== '0' && A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3] && A[i+3]==A[i+4] && A[i+4]==A[i+5])
        {
           run0_6 = ++run0_6;
        } 
         if (A[i]== '1'&& A[i]==A[i+1] && A[i+1]== A[i+2] && A[i+2]==A[i+3] && A[i+3]==A[i+4] && A[i+4]==A[i+5])
        {
           run1_6 = ++run1_6;
        }
        //}       
    }
    
    
    
    // Результаты тест серии 
    cout <<"Длина серии диапазона 1 для нуля равна: "<<run0_1 << " " << endl;
    cout <<"Длина серии диапазона 1 для единицы равна: " <<run1_1 << " " << endl;
    cout <<"Длина серии диапазона 2 для нуля равна: " << run0_2 << " " << endl;
    cout <<"Длина серии диапазона 2 для единицы равна: " << run1_2 << " " << endl;
    cout <<"Длина серии диапазона 3 для нуля равна: " << run0_3 << " " << endl;
    cout <<"Длина серии диапазона 3 для единицы равна: " << run1_3 << " " << endl;
    cout <<"Длина серии диапазона 4 для нуля равна: " << run0_4 << " " << endl;
    cout <<"Длина серии диапазона 4 для единицы равна: " << run1_4 << " " << endl;
    cout <<"Длина серии диапазона 5 для нуля равна: " << run0_5 << " " << endl;
    cout <<"Длина серии диапазона 5 для единицы равна: " << run1_5 << " " << endl;
    cout <<"Длина серии диапазона 6 для нуля равна: " << run0_6 << " " << endl;
    cout <<"Длина серии диапазона 6 для единицы равна: " << run1_6 << " " << endl;
    
    
    getch ();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2011, 19:30     Серии в массиве.
Посмотрите здесь:

Серии (сумма ряда) C++
C++ Поменять местами две серии в массиве.
C++ Поменять местами две серии в массиве
C++ Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины
C++ Серии в массиве
Вставить после каждой серии нуль C++
C++ Поиск самой длиной серии одинаковых элементов в двумерном массиве
В массиве определить длину серии символов отличных от букв C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.09.2011, 20:45     Серии в массиве. #2
вы вот что поясните. Например, в слове "000" вы рассматриваете три серии 0 длины 1, две серии - длины 2 и одну серию - длины 3?
А разве это не одна серия длины 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
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
 
const int N = 60;
 
int main ()
{
    setlocale (LC_ALL, "Russian");
 
    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'};
    int j, i, n0, n1, povt0[N] = {0}, povt1[N] = {0};
    i = 0;
    while (i < N)
    {
        n0 = n1 = 0;
        while (i < N && a[i] == '0')
        {
           i++;
           n0++;
        }
        for (j = n0; j > 0; j--)
           povt0[j] += n0 - j + 1;
        while (i < N && a[i] == '1')
        {
           i++;
           n1++;
        }
        for (j = n1; j > 0; j--)
           povt1[j] += n1 - j + 1;
    }
    cout << "0:" << endl;
    for(i = 1; i < N; i++)
       if (povt0[i])
          cout << i << " " << povt0[i] << endl;
 
    cout << "1:" << endl;
    for(i = 1; i < N; i++)
       if (povt1[i])
          cout << i << " " << povt1[i] << endl;
    return 0;
}
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
18.09.2011, 21:48  [ТС]     Серии в массиве. #3
Спасибо!!!

По заданию мне надо было рассматривать по отдельности для диапазона 1,2,3,4,5,6. Вы правильно поняли задачу.
Yandex
Объявления
18.09.2011, 21:48     Серии в массиве.
Ответ Создать тему
Опции темы

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