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

Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел - C++

Восстановить пароль Регистрация
 
V1k1nG
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
24.06.2013, 21:01     Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел #1
Имеется двумерный массив с целыми элементами - единицами и двойками. Задача состоит в том, чтобы при нахождении в строке/столбце/диагонали последовательностей одинаковых чисел, ограниченных другими, например 12221,или 212, элементы, ограниченные с двух сторон, заменялись на те, которые их ограничивают т. е. 1221->1111;212->222 Массив 8*8 Есть код для замены в горизонталях, но работает не корректно, ибо написан кривыми руками первокурсника Помогите разобраться, в чем ошибка. Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int f=0;
        for(int i=0;i<8;i++) {//шаг строки
            for(int j=0;j<8;j++) {//шаг столбца
                for(int d=2;d<7-i;d++) {//оставшиеся клетки до конца
                    if(((massiv[i][j]==1)&&(massiv[i+d][j]==1))||((massiv[i][j]==2)&&(massiv[i+d][j]==2))) {//проверяем крайние клетки
                        for(int o=1;o<d;o++) {//счетчик для средних клеток
                            if(massiv[i+o][j]==massiv[d-1][j]) {
                                f++;
                            }
                        }   
                        if(f==d) {//заменяем средние клетки
                            for(int q=1;q<d;q++) {
                                massiv[i+q][j]=massiv[i][j];
                            }
                        }
                    }
                }
            }
        }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 21:01     Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел
Посмотрите здесь:

C++ На побочной диагонали матрицы разместить суммы элементов, которые лежат той же строке и столбце
C++ На побочной диагонали матрицы разместить суммы элементов, которые лежат той же строке и столбце
C++ Нахождение одинаковых чисел в массиве
C++ Нахождение минимума/максимума в конкретной строке или столбце
Упорядочить столбцы матрицы по возрастанию количества одинаковых элементов в каждом столбце C++
C++ На побочной диагонали разместить суммы элементов лежащие на тех же строке и столбце
Нахождение наибольшего элемента в строке и этот элемент должен быть минимальным в столбце C++
C++ Записать размер последовательностей одинаковых чисел в новый массив

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
25.06.2013, 11:55     Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
int main()
{
randomize();
const int n = 5;
int massiv[n][n];
for(int i=0; i<n; i++)
  for(int j=0; j<n; j++)
    massiv[i][j] = rand()%3;
 
massiv[0][0] = 1;
massiv[0][1] = 2;
massiv[0][2] = 2;
massiv[0][3] = 1;
 
for(int i=0; i<n; i++)
  {
  for(int j=0; j<n; j++)
    {
    cout << massiv[i][j] << ' ';
    }
  cout << endl;
  }
 
 cout << endl<< endl<< endl<< endl;
 
  for(int i=0;i<n;i++) //шаг строки        ////
    for(int j=0;j<n;j++) //шаг столбца       //
        for(int c=i; c<n; c++)               //
          {                                  //
          if(massiv[c][j]==1)                //
            for(int k=i; k<c; k++)           //
              massiv[k][j] = massiv[i][j];   //
          if(massiv[i][c]==1)                //
            for(int k=j; k<c; k++)           //
              massiv[i][k] = massiv[i][j];   //
          }                                ////
 
for(int i=0; i<n; i++)
  {
  for(int j=0; j<n; j++)
    {
    cout << massiv[i][j] << ' ';
    }
  cout << endl;
  }
 
    getch();
    return 0;
}


Алгоритм грубой силы
C++
1
2
3
4
5
6
7
8
9
10
11
  for(int i=0;i<n;i++) //шаг строки        ////
    for(int j=0;j<n;j++) //шаг столбца       //
        for(int c=i; c<n; c++)               //
          {                                  //
          if(massiv[c][j]==1)                //
            for(int k=i; k<c; k++)           //
              massiv[k][j] = massiv[i][j];   //
          if(massiv[i][c]==1)                //
            for(int k=j; k<c; k++)           //
              massiv[i][k] = massiv[i][j];   //
          }                                ////

Название: 1111.JPG
Просмотров: 32

Размер: 3.8 Кб

Но условие недостаточное.
Цитата Сообщение от V1k1nG Посмотреть сообщение
Задача состоит в том, чтобы при нахождении в строке/столбце/диагонали последовательностей одинаковых чисел, ограниченных другими, например 12221,или 212, элементы, ограниченные с двух сторон, заменялись на те, которые их ограничивают
Если мы пройдемся такой заменой один раз, то получим лишь другую матрицу, не удовлетворяющую первоначальному условию. Если же проходиться в несколько итераций, то в конце концов вся матрица будет состоять только из одного крайнего левого верхнего элемента (так как с него идет обход), либо вся будет заполнена только двумя разными элементами, если они будут располагаться напротив друг друга у двух крайних стенок. И что сначала просматривать - строки или столбцы? Так как это тоже будет изменять текущую матрицу, и соответственно выдаст другой результат.

P.S. Попробуйте поподробнее описать свой алгоритм, чтобы понять, чего именно вы пытались им добиться.
Yandex
Объявления
25.06.2013, 11:55     Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел
Ответ Создать тему
Опции темы

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