Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
V1k1nG
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
#1

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

24.06.2013, 21:01. Просмотров 339. Ответов 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];
                            }
                        }
                    }
                }
            }
        }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нахождение в строке/столбце/диагонали матрицы последовательностей одинаковых чисел (C++):

На побочной диагонали матрицы разместить суммы элементов, которые лежат той же строке и столбце - C++
Нужно написать код на чистом С. 1. Дана прямоугольная матрица . Заполнить матрицу случайными числами. На побочной диагонали разместить...

На побочной диагонали матрицы разместить суммы элементов, которые лежат той же строке и столбце - C++
Заполнить матрицу случайными числами. На побочной диагонали разместить суммы элементов, которые лежат той же строке и столбце. ...

Записать размер последовательностей одинаковых чисел в новый массив - C++
Здравствуйте, помогите разобраться. Есть массив { 1,1,5,2,6,1,1,1 } (как пример) на выходе должно получиться {2,3}. Пока есть такое....

Нахождение минимума/максимума в конкретной строке или столбце - C++
Ребят, подскажите пожалуйста, я забыл как находить минимальный/максимальный элемент в конкретной строке/столбце. Подправьте код, а то...

Нахождение наибольшего элемента в строке и этот элемент должен быть минимальным в столбце - C++
a)Матрица задана формулой A=0.1*(N*N-pow((j-N/2+0.2),2))*pow((i-N/2-0.3),2); Нужно вывести вектор x из пункта б б)Элемент матрицы...

Упорядочить столбцы матрицы по возрастанию количества одинаковых элементов в каждом столбце - C++
Дана целочисленная прямоугольная матрица. Упорядочить столбцы матрицы по возрастанию количества одинаковых элементов в каждом столбце. ...

1
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,552
Завершенные тесты: 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. Попробуйте поподробнее описать свой алгоритм, чтобы понять, чего именно вы пытались им добиться.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 11:55
Привет! Вот еще темы с ответами:

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

Нахождение одинаковых чисел в массиве - C++
Здрасьте всем, есть небольшой вопрос. Имеется массив из пяти элементов. Необходимо найти в нем пары одинаковых чисел. Сортировка...

Нахождение в массиве двух одинаковых чисел - C++
Здравствуйте. Застрял на задаче, решил попросить у вас помощи. Суть её в том, что из файла считывается массив целых чисел, в нём находятся...

Подсчет суммы элементов в заданном рядке/столбце/диагонали матрицы - C++
Всем привет. Значит, дело такое: разработать функцию для подсчета суммы элементов заданной строки, столбца или диагонали матрицы. Сама...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru