Заполнение массива по спирали - C (СИ)
Формулировка задачи:
заполнение массива по спирали начиная с левого нижнего угла за часовой стрелкой
5 06 07 08 09
4 19 20 21 10
3 18 25 22 11
2 17 24 23 12
1 16 15 14 13
Решение задачи: «Заполнение массива по спирали»
textual
Листинг программы
int i,n,x,y,**a; int l,d,yx; int dx[]={ 0,1,0,-1}; int dy[]={-1,0,1, 0}; printf("n="); scanf("%d",&n); a=(int**)malloc(n*sizeof(int*)); for(i=0; i<n; i++) a[i]=(int*)malloc(n*sizeof(int)); d=x=0; l=y=n-1; for(yx=0; yx<n*n;) { for(i=0; i<l; i++) { a[y][x]=++yx; x+=dx[d]; y+=dy[d]; } d=++d%4; if(!d) { x++; y--; l-=l==2?1:2; } } for(y=0; y<n; y++,printf("\n")) for(x=0; x<n; x++) printf("%3d",a[y][x]); system("pause"); for(i=0; i<n; i++) free(a[i]); free(a);
Объяснение кода листинга программы
В этом коде заполняется массив по спирали, используя цикл и вспомогательные переменные. Вот список, описывающий код:
- Объявляются переменные:
i
,n
,x
,y
,**a
- для хранения значений и работы с массивом.l
,d
,yx
- для контроля цикла и управления перемещением по массиву.dx[]
иdy[]
- для хранения направлений движения по массиву.
- Пользователю предлагается ввести размер массива (
n
). - Массив
a
динамически выделяется с помощьюmalloc
. - В цикле заполняются все элементы массива.
- Цикл контролируется с помощью переменной
yx
, которая увеличивается на единицу при каждой итерации. - Код перемещается по массиву, используя вспомогательные переменные
x
,y
,l
иd
. - После заполнения массива выводится на экран.
- Массив освобождается с помощью
free
, чтобы избежать утечки памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д