123
894
765
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
这样的数组称蚊香数组
给定参数N
求data[N][N]蚊香数组的实现
/**/ /*解这类题,主要就是要注意方向和步长控制
以你这道题为例谈谈做法
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9*/
#include < stdio.h >
#define N 5
int main()
... {
//(1)初始化
int a[N][N];
int i=0,j=0;
int m=1;
//为什么这样,因为起点在(0,0),起点值是1
//(2)
bool bRight=true;//右走,还是左走
int x1=N,y1=N-1;//这个是步长控制,在x方向走x1步,y方向走y1步
while(m<=N*N)//循环结束条件
...{
int k=0;
if(bRight)
...{
for(k=0;k<x1;++k)//水平右走
...{
a[i][j]=m++;
j++;//水平右走,j加1
}
//i,j回归
i++;j--;
for(k=0;k<y1;++k)//垂直向下
...{
a[i][j]=m++;
i++;
}
//i,j回归
i--;j--;
bRight=!bRight;//换向
//步长调整
x1--;y1--;
}
else
...{
for(k=0;k<x1;++k)//水平左走
...{
a[i][j]=m++;
j--;//水平左走,j加1
}
//i,j回归
i--;j++;
for(k=0;k<y1;++k)//垂直向上
...{
a[i][j]=m++;
i--;
}
//i,j回归
i++;j++;
bRight=!bRight;//换向
//步长调整
x1--;y1--;
}
}
for(i=0;i<N;++i)
...{
for(j=0;j<N;++j)
printf("%4d",a[i][j]);
printf(" ");
}
}
// 声明,这是一类题的解法,碰到这种矩阵,应该能轻松解决了吧。