Matrix
94 90 88 96
37 73 81 69
29 32 38 60
48 85 15 58
New Matrix
94 37 29 48
90 73 32 85
88 81 38 15
96 69 60 58
Для продолжения нажмите любую клавишу . . .
Развернуть матрицу используя скалярные выражения
Есть задание:
Дана квадратная матрица размерности N, Например:
| 5 |12|88|
|65|54|43|
|81|92|56|
Нужно ее развернуть на 90 градусов, чтобы вышло:
|81|65| 5 |
|92|54|12|
|56|43|88|
Вопрос: как это сделать не копируя матрицу в память и без использования любых динамических структур? Можна использовать счетное количество скалярных переменных, не зависящее от размерности матрицы.
UPD:
Делаю так:
Код:
public static void Rotate()
{
int tmp;
for (int i = 0; i < n/2; i++)
{
for (int j = i; j < n - 1 - i; j++)
{
tmp = matrix[i,j];
matrix[i,j] = matrix[n - j - 1,i];
matrix[n - j - 1,i] = matrix[n - i - 1,n - j - 1];
matrix[n - i - 1,n - j - 1] = matrix[j,n - i - 1];
matrix[j, n - i - 1] = tmp;
}
}
}
{
int tmp;
for (int i = 0; i < n/2; i++)
{
for (int j = i; j < n - 1 - i; j++)
{
tmp = matrix[i,j];
matrix[i,j] = matrix[n - j - 1,i];
matrix[n - j - 1,i] = matrix[n - i - 1,n - j - 1];
matrix[n - i - 1,n - j - 1] = matrix[j,n - i - 1];
matrix[j, n - i - 1] = tmp;
}
}
}
На сколько такое решение правильно?
Спасибо!
1) сие творение работает?
2) что вам даст нечетное n - типа integer, которое делите на 2?
3) чем не угодили массивы?
4) зачем все эту лабуду хранить в скалярных переменных, когда к массивам доступ проще?
САМЫЙ ГЛАВНЫЙ ВОПРОС?
Кто придумал такое убогое задание????
идея такая
Код:
void TransposedMatrix(int size, int** arr)
{
int **tMatrix = AllocateMemmory(size);
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
{
tMatrix[jdx][idx] = arr[idx][jdx];
}
}
cout << "nNew Matrix" << endl;
PrintMatrix(size, tMatrix);
FreeMemmory(size, tMatrix);
}
{
int **tMatrix = AllocateMemmory(size);
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
{
tMatrix[jdx][idx] = arr[idx][jdx];
}
}
cout << "nNew Matrix" << endl;
PrintMatrix(size, tMatrix);
FreeMemmory(size, tMatrix);
}
Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using std::cout;
using std::endl;
using std::system;
int** AllocateMemmory(int size);
void FeelMatrix(int size, int** arr);
void PrintMatrix(int size, int** arr);
void FreeMemmory(int size, int** arr);
void TransposedMatrix(int size, int** arr);
int main()
{
srand((unsigned)time(NULL));
//int size = rand()%8+2;
int size = 3;
int **arr = AllocateMemmory(size);
FeelMatrix(size, arr);
cout << "Matrix" << endl;
PrintMatrix(size, arr);
TransposedMatrix(size, arr);
FreeMemmory(size, arr);
cout << endl;
system("pause");
return 0;
}
int** AllocateMemmory(int size)
{
int ** arr = new int*[size];
for (int idx = 0; idx < size; idx++)
{
arr[idx] = new int[size];
}
return arr;
}
void FeelMatrix(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
arr[idx][jdx] = rand() % 100;
}
}
void PrintMatrix(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
cout << arr[idx][jdx] << "t";
cout << endl;
}
}
void TransposedMatrix(int size, int** arr)
{
int **tMatrix = AllocateMemmory(size);
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
{
tMatrix[jdx][idx] = arr[idx][jdx];
}
}
cout << "nNew Matrix" << endl;
PrintMatrix(size, tMatrix);
FreeMemmory(size, tMatrix);
}
void FreeMemmory(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
delete[] arr[idx];
}
delete[] arr;
}
#include <cstdlib>
#include <ctime>
using std::cout;
using std::endl;
using std::system;
int** AllocateMemmory(int size);
void FeelMatrix(int size, int** arr);
void PrintMatrix(int size, int** arr);
void FreeMemmory(int size, int** arr);
void TransposedMatrix(int size, int** arr);
int main()
{
srand((unsigned)time(NULL));
//int size = rand()%8+2;
int size = 3;
int **arr = AllocateMemmory(size);
FeelMatrix(size, arr);
cout << "Matrix" << endl;
PrintMatrix(size, arr);
TransposedMatrix(size, arr);
FreeMemmory(size, arr);
cout << endl;
system("pause");
return 0;
}
int** AllocateMemmory(int size)
{
int ** arr = new int*[size];
for (int idx = 0; idx < size; idx++)
{
arr[idx] = new int[size];
}
return arr;
}
void FeelMatrix(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
arr[idx][jdx] = rand() % 100;
}
}
void PrintMatrix(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
cout << arr[idx][jdx] << "t";
cout << endl;
}
}
void TransposedMatrix(int size, int** arr)
{
int **tMatrix = AllocateMemmory(size);
for (int idx = 0; idx < size; idx++)
{
for (int jdx = 0; jdx < size; jdx++)
{
tMatrix[jdx][idx] = arr[idx][jdx];
}
}
cout << "nNew Matrix" << endl;
PrintMatrix(size, tMatrix);
FreeMemmory(size, tMatrix);
}
void FreeMemmory(int size, int** arr)
{
for (int idx = 0; idx < size; idx++)
{
delete[] arr[idx];
}
delete[] arr;
}
Код: