Дан прямоугольный массив. Переместить элементы массива, стоящие по периметру на 2 элемента против часовой стрелки - C (СИ)
Формулировка задачи:
Вот такое задание стоит, нужна помощь. Заранее спасибо!
Решение задачи: «Дан прямоугольный массив. Переместить элементы массива, стоящие по периметру на 2 элемента против часовой стрелки»
textual
Листинг программы
#include <stdlib.h> /*для функции malloc*/
#include <stdio.h> /*для функции printf*/
#define ROW 6
#define COL 7
int main()
{
int mArray[ROW][COL] = {1, 2, 3, 4, 5, 6, 7,
22, 0, 0, 0, 0, 0, 8,
21, 0, 0, 0, 0, 0, 9,
20, 0, 0, 0, 0, 0,10,
19, 0, 0, 0, 0, 0,11,
18,17,16,15,14,13,12};
int * arrPerimetr = NULL,
perimetr = 0,
i = 0, j = 0, n = 0, m = 0, k = 0,
shift = 2; /* насколько сдвигаем */
perimetr = (ROW + COL) * 2 - 4;
m = perimetr - 1;
arrPerimetr = (int*)malloc(sizeof(int) * perimetr);
for ( i = 0 ; i < ROW; i++ )
{
printf("\n");
for ( j = 0 ; j < COL; j++ )
{
if(i == 0 || (i > 0 && j == COL - 1))
{
arrPerimetr[n] = mArray[i][j];
n++;
}
if(j == 0 && i > 0|| (i == ROW - 1 && j < COL - 1))
{
arrPerimetr[m] = mArray[i][j];
m--;
}
printf("\t%d",mArray[i][j] );
}
}
puts("\n\n New Array :");
/*fill*/
n = shift;
k = 0;
m = perimetr - 1 ;
for ( i = 0 ; i < ROW; i++ )
{
printf("\n");
for ( j = 0 ; j < COL; j++ )
{
if(i == 0 || (i > 0 && j == COL - 1))
{
mArray[i][j] = arrPerimetr[n];
n++;
}
if(j == 0 && (i > 0 && i <= shift))
{
mArray[i][j] = arrPerimetr[k];
k++;
}
if(
(j == 0 && i > shift && i < COL - 1)
||
( i == ROW - 1 && j > 0 && j <= ROW )
)
{
mArray[i][j] = arrPerimetr[m];
m--;
}
printf("\t%d",mArray[i][j] );
}
}
printf("\n");
free(arrPerimetr);
system("pause");
}