#include<iostream>
#include<cstdio>
using namespace std;
//定义方向上x,y各自的变化:左{0,1}下{1,0}右{0,-1}上{-1,0}
int wayx[4]={0,1,0,-1};//定义x轴上各个方向偏移量
int wayy[4]={1,0,-1,0};//定义y轴上各个方向偏移量
int main()
{
int n=0;
int m=0;
scanf("%d %d",&n,&m);
int arr[101][101]={0};
int i=0;//统计总步数,顺便用于填充数字
int x=0;//计算x的边界
int y=0;//计算y的边界
int way=0;//计算方向
int j=0;
int xx=0;
int yy=0;
for(i=1,x=0,y=0,way=0;i<=m*n;i++)
{
arr[x][y]=i;
//计算下一个方向的x和y
xx=x+wayx[way];
yy=y+wayy[way];
//判断是否出界或者已经被填充
if(xx<0||xx>=n||yy<0||yy>=m||arr[xx][yy]>0)
{
way=(way+1)%4;
xx=x+wayx[way];
yy=y+wayy[way];
}
//更新一下新的坐标
x=xx;
y=yy;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");//换行操作
}
system("pause");
return 0;
}
当初在洛谷看到类似的题目,作为一个刚刚接触c的人我还一点都不会做,被这道题搞得很痛苦;
现在感觉在不断进步!!!今天也是刚学会左右上下可以用两个数组来控制,很有意思!!!