螺旋填数
题目描述:
创建一个m行n列的数组,将1—m*n的数字螺旋填入
方向为右下左上
输入说明:
输入正整数m和n,以空格分隔
输出说明:
输出填好的数组,数组元素之间用空格分隔,数组每行之间以换行分隔
输入示例:
4 5
输出示例:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
#include <stdio.h>
int main() {
int m,n;
scanf("%d%d",&m,&n);
int origin[m][n];//最后要输出的数组
int map[m][n];
int x,y,num=1;
for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
map[x][y]=0;
}
}//一定要初始化!
x=0;y=0;
while(num<=m*n)
{
while(map[x][y]!=1&&x>=0&&x<m&&y>=0&&y<n)
{
origin[x][y]=num;
map[x][y]=1;
num++;y++;
}//往右走
x++;y--;//超出范围了,让它回来。下面同理。
while(map[x][y]!=1&&x>=0&&x<m&&y>=0&&y<n)
{
origin[x][y]=num;
map[x][y]=1;
num++;x++;
}
x--;y--;
while(map[x][y]!=1&&x>=0&&x<m&&y>=0&&y<n)
{
origin[x][y]=num;
map[x][y]=1;
num++;y--;
}
y++;x--;
while(map[x][y]!=1&&x>=0&&x<m&&y>=0&&y<n)
{
origin[x][y]=num;
map[x][y]=1;
num++;x--;
}
x++;y++;
}
for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
printf("%d ",origin[x][y]);
}
if(x!=m-1)
{
printf("\n");
}
}
return 0;
}