@dima4512zaz

Как решить задачу с двумерным массивом?

Помогите решить задачу, написал код, не могу исправить ошибку.

Задача: Дана матрица размера M × N (M и N — четные числа). Поменять местами левую верхнюю и правую нижнюю четверти матрицы.

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "Russian");
	int n = 0, c = 0;
	cout << "Введите количество строк и столбцов: ";
	cin >> n >> c;
	int**a = new int*[n];
	for (int i = 0; i < n; i++)
	{
		a[i] = new int[c];
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < c; j++)
		{
			a[i][j] = rand() % 25;
			cout << a[i][j] << "\t";
		}
		cout << endl;
	}
	cout << endl;
	int k = n / 2;
	int l = c / 2;
	for (int i = 0; i <= k; i++)
	{
		for (int j = 0; j <= l; j++)
		{
			int temp = a[i][j];
			a[i][j] = a[i + k][j + l];
			a[i + k][j + l] = temp;
			cout << temp << " ";
		}
	}
}


Ошибка
5c0d252db9081887983169.png
  • Вопрос задан
  • 1044 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
int k = n / 2;
  int l = c / 2;
  for (int i = 0; i <= k; i++)
  {
    for (int j = 0; j <= l; j++)
    {
      int temp = a[i][j];
      a[i][j] = a[i + k][j + l];
      a[i + k][j + l] = temp;
      cout << temp << " ";
    }
  }

должно стать
int k = (n + 1) / 2;
  int l = (c + 1) / 2;
  for (int i = 0; i < n / 2; i++)
  {
    for (int j = 0; j < c / 2; j++)
    {
      int temp = a[i][j];
      a[i][j] = a[i + k][j + l];
      a[i + k][j + l] = temp;
      cout << temp << " ";
    }
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы