-
Notifications
You must be signed in to change notification settings - Fork 0
/
1_2.c
35 lines (32 loc) · 1.79 KB
/
1_2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
int main(){//будем представлять матрицу в виде прямоугольников которые входят друг в друга и будем обходить каждый прямоугольник со сдвигом относительно внешнего по часовой стрелке до тех пор пока мы не разместим все нужные элементы
int M,N,i = 0,j = 0,k = 1,s,Ibeg = 0,Jbeg = 0,Ifin = 0,Jfin = 0;//ввод нужных переменных
scanf("%d %d", &M, &N);//ввод числа строк и столбцов
printf("%d %d\n", M, N);//контрольный вывод числа строк и столбцов
s=M*N;
int a[M][N];//M-строка, N-столбец
while (k<=s){
a[i][j] = k;
if (i == Ibeg && j < N - Jfin - 1)//если мы находимся на верхней стороне прямоугольника и не достигли правой стороны двигаемся вправо
j++;
else if (j == N - Jfin - 1 && i < M - Ifin - 1)// если мы находимся на правой стороне и не достигли нижнейй стороны двигаемся вниз
i++;
else if (i == M - Ifin - 1 && j > Jbeg)//если мы находимся на нижней стороне и не достигли левой стороны двигаемся влево
j--;
else// иначе двигаемся вверх
i--;
if ((i == Ibeg + 1) && (j == Jbeg) && (Jbeg != N - Jfin - 1)){
Ibeg++;
Ifin++;
Jbeg++;
Jfin++;
}
k++;
}
for (int i = 0; i < M; i++){//вывод массива по строкам
for (int j = 0; j < N; j++)
printf("%4d ", a[i][j]);
printf("\n");
}
return 0;
}