關於蚊香數組的實現

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章