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

Двумерный массив. Определить номер строки с самой длинной серией одинаковых элементов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Блочная сортировка массива http://www.cyberforum.ru/cpp-beginners/thread1170830.html
В данный момент пытаюсь решить задачу, требуется помощь с пунктом "А)" (остальные попробую сам). Условие: Блочная сортировка требует наличия одномерного массива положительных целых чисел, который нужно сортировать, и двумерного массива целых чисел со строками, проиндексированными от 0 до 9, и столбцами, проиндексированными от 0 до (n -1), где n — количество значений в массиве, который должен...
C++ Запись в файл Мне нужно, чтобы данная программа вывела ответ в екселевский файл. Но почему то не выходит. Файл создал прям на диске "С" с названием out_file.xls . Помогите пожалуйста. p.s прога норм работает, и ответ обычный на черном экране выводит, проблема только в записи ответа в ексель. using namespace std; fstream file; double Pi=9*3.14/5; double R1=30, R2=25, R3=50, R4=1.88, R5=15, R6=50;... http://www.cyberforum.ru/cpp-beginners/thread1170816.html
C++ Как удалить ребро в графе?
Имеется граф с N вершинами и заданный списком смежности. Требуется удалить ребро, который соединяет вершины a и b. Ребро задается отдельной переменной? И как реализовать его удаление?
Найти убывающие последовательности из четырех элементов стоящих друг за другом C++
В одномерном массиве (не менее 7 элементов) определите и выведите на экран убывающие последовательности из четырех элементов стоящих друг за другом, если они есть.
C++ Модель Изинга http://www.cyberforum.ru/cpp-beginners/thread1170796.html
Здраствуйте, помогите пож. реализовать модель Изинга. Спасибо
C++ Выбрать название динамической структуры (назвать класс) Как попроще обозвать свою динамическую структуру данных. Можно ли как-то использовать универсальное название типа MyStruct, но скромнее)) подробнее

Показать сообщение отдельно
Georguy
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 33

Двумерный массив. Определить номер строки с самой длинной серией одинаковых элементов - C++

09.05.2014, 16:32. Просмотров 423. Ответов 5
Метки (Все метки)

Всем привет! Нужна помощь в следующем задании: дана целочисленная прямоугольная матрица, определить номер строки с самой длинной серией одинаковых элементов.
Нужна программа для общего случая, т.е., если самая длинная последовательность встречается в нескольких строках, то ответом должны быть номера этих строк, а не только номер первой встречающейся из них. Вот мой код, только для случая, если существует только одна такая строка:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <limits>
#include <time.h>
 
using namespace std;
 
bool nomer_stroki(int **matriza, int &nomer_strochki, int chislo_strok, int chislo_stolbcov);
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int chislo_strok, chislo_stolbcov;
 
    int kolvo_stolbcov;
    int nomer_strochki;
 
    srand(time(NULL));
 
    cout << "Введите число строк " << endl;
    cin >> chislo_strok;
    while (cin.fail() || chislo_strok <= 0)
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Вы ввели неправильное число строк" << endl;
        cin >> chislo_strok;
    }
 
    cout << "Введите число столбцов " << endl;
    cin >> chislo_stolbcov;
    while (cin.fail() || chislo_stolbcov <= 0)
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Вы ввели неправильное число столбцов" << endl;
        cin >> chislo_stolbcov;
    }
 
    int **matriza;
    matriza = new int*[chislo_strok];
 
    for (int i = 0; i < chislo_strok; i++)
        matriza[i] = new int[chislo_stolbcov];
 
    cout << endl;
 
    for (int i = 0; i < chislo_strok; i++)
    {
        for (int j = 0; j < chislo_stolbcov; j++)
        {
            matriza[i][j] = rand() % 10;
            cout << matriza[i][j] << " ";
        }
        cout << endl;
    }
 
    if (nomer_stroki(matriza, nomer_strochki, chislo_strok, chislo_stolbcov))
        cout << "Номер строки, в которой находится самая длинная серия одинаковых элементов: " << nomer_strochki+1 << endl;
    else
        cout << "Cерий одинаковых элементов нет" << endl;
 
    for (int i = 0; i < chislo_strok; i++)
        delete[] matriza[i];
    delete[]matriza;
 
    system("Pause");
    return 0;
}
 
 
bool nomer_stroki(int **matriza, int &nomer_strochki, int chislo_strok, int chislo_stolbcov)
{
    nomer_strochki = 0;
    bool value = true;
    int dlina_pocledovatelnosti;
    int pred_podschet = 0;
 
    for (int i = 0; i < chislo_strok; i++)
        for (int j = 0; j < chislo_stolbcov - 1; j++)
        {
            dlina_pocledovatelnosti = 0;
            if (matriza[i][j] == matriza[i][j + 1])
                while (matriza[i][j] == matriza[i][j + 1])
                {
                    dlina_pocledovatelnosti++;
                    j++;
                }
                if (dlina_pocledovatelnosti > pred_podschet)
                {
                    nomer_strochki = i;
                    pred_podschet = dlina_pocledovatelnosti;
                }
        }
    if (pred_podschet == 0)
        value = false;
    return value;
}
P.s.: возможно вознаграждение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru