关于蚊香数组的实现

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(
" ");  
    }
  
}
  
   
// 声明,这是一类题的解法,碰到这种矩阵,应该能轻松解决了吧。 

你可能感兴趣的:(关于蚊香数组的实现)