1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
1

Серии в массиве.

18.09.2011, 19:30. Показов 3670. Ответов 2
Метки нет (Все метки)

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

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

Тест серии последовательности. Под серией понимается последовательность одинаковых символов (нулей и единиц). То есть подсчитать сначала сколько единиц и нулей, далее сколько раз подряд два нуля и две единицы в массиве , далее сколько раз подряд три нуля и три единицы, далее сколько раз подряд четыря нуля и четыре единицы и так далее до шести. Вывести число серий для каждого диапазона от 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;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2011, 19:30
Ответы с готовыми решениями:

Серии в массиве
Доброго времени суток. Прощу помощи с задачей на Си .. Дано целое число K (&gt; 1) и целочисленный...

Поменять местами две серии в массиве
Помогитие пожалуйста написать программку на С. Задан целочисленный массив размера N. Поменять...

Поменять местами две серии в массиве.
Помогите пожалуйста со следующей задачей. Задан целочисленный массив размера N. Поменять ...

В массиве определить длину серии символов отличных от букв
помогите пожайлуста. Дан массив символов, содержащий текст. Определить длину...

2
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.09.2011, 20:45 2
Лучший ответ Сообщение было отмечено Corvette как решение

Решение

вы вот что поясните. Например, в слове "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;
}
1
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
18.09.2011, 21:48  [ТС] 3
Спасибо!!!

По заданию мне надо было рассматривать по отдельности для диапазона 1,2,3,4,5,6. Вы правильно поняли задачу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2011, 21:48
Помогаю со студенческими работами здесь

Поиск самой длиной серии одинаковых элементов в двумерном массиве
Помогите, нужно найти самую длинную серию одинаковых элементов в двумерном массиве.

Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины
В общем, есть две задачи, ух на какую же веселую и ни черта не понятную для меня тему. 1. Задан...

Серии (сумма ряда)
Доброго времени суток господа, возник вопрос, проблема состоит в решении суммы ряда. Не могли бы вы...

Вставить после каждой серии нуль
Дан целочисленный массив размера N. Вставить после каждой его серии элемент с нулевым значением....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru