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

Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
123456кам
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 49
04.05.2012, 14:00     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #1
Вот полное задание:
1) количество столбцов, содержащих хотя бы один нулевой элемент;
2) номер строки, в которой находится самая длинная серия одинаковых элементов.

с первым я разобрался, а со второй частью проблема, как нужно задать массив m[i]...

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include <iostream.h>
#include <windows.h>
 
char bufRus[256];
 
char* Rus(const char* text) {
CharToOem(text, bufRus);
return bufRus;
}
 
void main()
{
int const n = 3;
int mas[n][n], c = 0;
cout << Rus("Введите матрицу\n");
 
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
cout << Rus("Введите элемент массива[")<<i+1<<("][")<<j+1<<("]:");
cin >> mas[i][j];
}
 
for (i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (mas[j][i] == 0)
{
c++;
break;
}
 
}
 
}
 
cout << Rus("Количество столбцов содержащих нулевой элемент: ") << c << endl;
 
for (i = 0; i < n; i++)
{
int m[i]; // собственно вот та самая проблема
for (int j = 0; j < n; j++)
{
if(mas[i][j] == mas[i][j+1])
{
m[i]++;
}
}
}
 
int max = m[0];
int numstr;
 
for (int i = 0; i < 5; i++)
{
if(m[i] > m[0])
{
max = m[i];
numstr = i;
}
else
{
max = m[0];
numstr = 0;
}
 
}
cout << Rus("Строка с самой длинной серией одинаковых элементов: ") << numstr << endl;
}
заранее благодарю за помощь!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 14:00     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов
Посмотрите здесь:

Номер столбца, в которой находится самая длинная серия одинаковых элементов. C++
C++ Определить номер столбца матрицы, в котором находится самая длинная серия одинаковых элементов
Номер строки, в которой самая длинная серия одинаковых злементов C++
C++ Составить программу, которая находит номер столбца, в котором находится самая длинная серия одинаковых элементов
C++ Дана целочисленная прямоугольная матрица. Определить номер строки, в которой находится самая длинная серия одинаковых элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aspin
1 / 1 / 0
Регистрация: 03.05.2012
Сообщений: 26
04.05.2012, 14:54     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #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
int *mas1 = new int [m];
    for (int i=0;i<m;i++)
        mas1[i]=1;
 
    int k=0,k1=0;
    for (int i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            if (mas[i][j]==mas[i][j+1])
                mas1[i]++;
        }
    }
    cout<<endl<<endl;
    for (i=0;i<m;i++)
        cout<<mas1[i]<<" ";
 
    int max=mas1[0],index=0;
    for (int i=1;i<m;i++)
    {
        if (max<mas1[i])
        {
                max=mas1[i];
                index=i;
        }
    }
    cout<<endl<<"count: "<<max<<endl<<"length: "<<index+1<<endl;
но тут не учтен случай когда ни в одной строке нет цепочки одинаковых символов. В случае когда в двух или более строках будет одинаковая цепочка, он выдаст первую которую встретит.

P.S. массив лучше задавать динамически
C++
1
2
3
int **mas = new int *[m];
    for (int i = 0; i < m; i++) 
    mas[i] = new int [n];
123456кам
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 49
04.05.2012, 15:36  [ТС]     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #3
а возможно задать массив не динамически?
aspin
1 / 1 / 0
Регистрация: 03.05.2012
Сообщений: 26
04.05.2012, 17:37     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #4
можешь не динамически, просто это более лучше, не захламляешь память ненужной информацией. Вобщем дело твое как тебе легче так и делай.
123456кам
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 49
04.05.2012, 18:27  [ТС]     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #5
Подскажи еще одну вещь я ввожу матрицу 112 222 331, и следующий код мне выдает что самая длинная последовательность в 1 строке, хотя ей является вторая, в остальных случаях все работает правильно, вот код:

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
int m[n];
        for (i = 0; i < n; i++)
        {
            m[i] = 0;
            for (int j = 0; j < n; j++)
            {
                if(mas[i][j] == mas[i][j+1])
                {
                    m[i]++;
                }
            }
        }
 
        int max = m[0];
        int numstr = 0;
 
        for (i = 0; i < n; i++)
        {
            if(max < m[i])
            {
                max = m[i];
                numstr = i;
            }
            else if(m[i] == 0)
            {
                cout << Rus("Г‚ ñòðîêå oäèГ*Г*êîâûõ ýëåìåГ*òîâ Г*ГҐГІ!\n");
            }
        }
 
        cout << Rus("ÑòðîêГ* Г± Г±Г*ìîé äëèГ*Г*îé ñåðèåé îäèГ*Г*êîâûõ ýëåìåГ*òîâ: ") << numstr << endl;
}
Добавлено через 4 минуты
хотя нет, и при вводе 112 334 444 выдает что самая длинная во 2 строке...

Добавлено через 23 минуты
сейчас посмотрел твой вариант, у тебя тоже самое выдает...
aspin
1 / 1 / 0
Регистрация: 03.05.2012
Сообщений: 26
04.05.2012, 18:47     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #6
проверил у меня эти примеры работают, все мои примеры работают вот короче код полностью сам проверь
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n=5,m=5,j=0,i=0;
    int a=0,b=5;
    srand(time(0));
 
    int **mas = new int *[m];
    for (int i = 0; i < m; i++) 
    mas[i] = new int [n];
 
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
        {
            mas[i][j]=a+rand()%(b-a);
            //cin>>mas[i][j];
        }
 
    for (int i=0;i<n;i++)
        for (j=0;j<m;j++)
        {
            cout<<mas[i][j]<<" ";
            if (j==n-1)
                cout<<endl;
        }
 
    int *mas1 = new int [m];
    
    for (int i=0;i<m;i++)
        mas1[i]=1;
 
    //int k=0,k1=0;
    for (int i=0;i<n;i++)
        for (j=0;j<m;j++)
        {
            if (mas[i][j]==mas[i][j+1])
                mas1[i]++;
        }
 
    cout<<endl<<endl;
 
    for (i=0;i<m;i++)
        cout<<mas1[i]<<" ";
 
    int max=mas1[0],index=0;
    for (int i=1;i<m;i++)
    {
        if (max<mas1[i])
        {
                max=mas1[i];
                index=i;
        }
    }
    cout<<endl<<"count: "<<max<<endl<<"length: "<<index+1<<endl;
 
    system ("PAUSE");
    return 0;
}
123456кам
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 49
04.05.2012, 20:05  [ТС]     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #7
я доделал, только чуть по другому)) но все ровно спасибо, помоги еще в последнем, вот код:

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
int const l = n - 1;
        int m[l];
        for (i = 0; i < l; i++)
        {
            m[i] = 0;
            for (int j = 0; j < l; j++)
            {
                if(mas[i][j] == mas[i][j+1])
                {
                    m[i]++;
                }
            }
        }
 
        int max = m[0];
        int numstr = 0;
 
        for (i = 0; i < n; i++)
        {
            if(max < m[i])
            {
                max = m[i];
                numstr = i;
            }
        }
 
        cout << Rus("Строка с самой длинной последовательностью: ") << numstr << endl;
        
        int sum = 0;
        for (i = 0; i < l; i++)
        {
            sum += m[i];
        }
 
        if(sum == 0)
        {
            cout << Rus("Последовательностей с одинаковыми элементами нет!\n");
        }
}
а как сделать так, когда ввожу 123456789, т.е. нет одинаковых, что бы не выдавало numstr = 2, чтобы если их нет, то ничего не выводить...
aspin
1 / 1 / 0
Регистрация: 03.05.2012
Сообщений: 26
04.05.2012, 21:44     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #8
ну самый простой способ когда делаешь вот это действие
C++
1
2
3
{
 if(mas[i][j] == mas[i][j+1])
 {
вставь флаг
C++
1
2
3
4
5
6
7
8
9
10
bool flag=false;
{
 if(mas[i][j] == mas[i][j+1])
flag=true;
.......
if (!flag)
cout << Rus("Последовательностей с одинаковыми элементами нет!\n");
else
cout << Rus("Строка с самой длинной последовательностью: ") << numstr << endl;
 {
123456кам
1 / 1 / 0
Регистрация: 11.11.2011
Сообщений: 49
04.05.2012, 22:24  [ТС]     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #9
черт, точно) тупонул))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 17:25     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов
Еще ссылки по теме:

Определить номер столбца, в котором находится самая длинная серия одинаковых элементов C++
C++ Двумерный массив: строка, в которой находится самая длинная серия одинаковых элементов
Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов C++

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

Или воспользуйтесь поиском по форуму:
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
11.09.2013, 17:25     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов #10
Здравствуйте, подниму старую тему, либо я не понял задания, либо алгоритма, но код предложенный выше не будет работать верно: например

0 0 1 1 0 0 0 0 3 4 1 2 3 2 значение m[0]=5
1 1 1 2 1 3 2 2 0 0 5 5 7 7 значение m[1]=6

но самая длинная серия в первой строке
Yandex
Объявления
11.09.2013, 17:25     Найти номер строки матрицы, в которой находится самая длинная серия одинаковых элементов
Ответ Создать тему
Опции темы

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