Дан прямоугольный массив. Переместить элементы массива, стоящие по периметру на 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"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д