/*
* 根据输入的 m n 显示螺旋数组
* @author 李政 <[email protected]>
*/
#include<stdio.h>
#define N 20
//行:m 列:n
void matrx(int a[][N],int m,int n)
{
int d,x=0,y=0;
int right,left,up,down;
// d是螺旋数组的值 [1,m*n]
for( d = 1; d <= m*n; d++)
{
a[x][y]=d;
//判断任意方向是否可以移动
// 当 y<n-1 且 右边的数 = 0 时 可以向右移动
right = y < n-1 && a[x][y+1] == 0;
// 当 y>0 且 左边的数 = 0 时 可以向左移动
left = y > 0 && a[x][y-1] ==0;
// 上下方向同理
down = x < m-1 && a[x+1][y] ==0;
up = x > 0 && a[x-1][y] ==0;
if(right)
{
//当可以向右时 如果可以向上移动时 要先向上移动
if(up)
x--;
//否则向右移动
else
y++;
}
else if(left)
{
//当可以向左时 如果可以向下先向下移动
if(down)
x++;
else
//否则向左移动
y--;
}
else if(down)
{
//当可以向下时 如果可以向右先向右移动
if(right)
y++;
//否则向下移动
else
x++;
}
else if(up)
{
//当可以向上时 如果可以向左先向左移动
if(left)
y--;
//否则向上移动
else
x--;
}
}
}
//打印数组
void output(int a[][N],int m, int n)
{
int i,j;
for( i = 0; i < m; i++)
{
for( j = 0; j < n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
void main()
{
int a[N][N] = {0};
int m,n;
printf("please input num:");
scanf("%d%d",&m,&n);
matrx(a,m,n);
output(a,m,n);
}
输出任意阶层的螺旋数组(c语言)
猜你喜欢
转载自blog.csdn.net/weixin_42205987/article/details/82024416
今日推荐
周排行