Как поменять местами числа в матрице?Си
Суть задачи - задана матрица целых чисел размером (N; N). Поменять местами две
окрашенные области. Запрещено использование дополнительных массивов. Я пробовал сделать данную задачу через трёхмерный массив,но у меня это не получилось. Прошу подсказки.
Модель задачи:
#include <stdio.h>
#include <math.h>
int main()
{
int R[4][4][4] = {
{ 4, 8, {11, 5}},
{ 2, 12, {9}, 14},
{ 0, 5, {0, 7} },
{ 1, 6, 3, {4} }
};
printf("Исходная матрица: \n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
for (int z = 0; z < 4; z++){
printf("%d",R[i][j][z]);
printf(" ");
}
}
}
for (int i = 0; i < 4; i++)
{
int tmp;
tmp = R[0][i];
R[0][i] = R[1][i];
R[1][i] = tmp;
}
printf("\nИзмененная матрица:");
printf("\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
for (int z = 0; z < 4; z++){
printf("%d",R[i][j][z]);
printf(" ");
}
}
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
#include <stdio.h>
#define N 6
int main()
{
int M[N][N] =
{
{ 1, 2, 3, 4, 5, 6 },
{ 7, 8, 9, 0, 1, 2 },
{ 3, 4, 5, 6, 7, 8 },
{ 9, 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9, 0 },
{ 1, 2, 3, 4, 5, 6 }
};
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < N; ++j)
printf("%2d ",M[i][j]);
puts("");
}
for(int i = 0; i <= (N-1)/2; ++i)
for(int j = N/2; j <= N-i-1; ++j)
{
int t = M[i][j];
M[i][j] = M[j][N-1-i];
M[j][N-1-i] = t;
}
printf("\n\n");
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < N; ++j)
printf("%2d ",M[i][j]);
puts("");
}
}

