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(" ");
}
}
//聲明,這是一類題的解法,碰到這種矩陣,應該能輕鬆解決了吧。