Заполнение массива по спирали - 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, чтобы избежать утечки памяти.