描述
用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式:
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
输入输入一个不大于10的正整数n,表示方阵的行数。输出输出该方阵,相邻两个元素之间用单个空格间隔。
样例输入
4
样例输出
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
思路
1 2 6
3 5 7
4 8 9 (n==3)
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25(n==5)
1. (j<n) ==>右移→;or (j=n) ==>下移 ↓;
2. (j<n) ==>左下↙;
3. (i<n) ==>下移 ↓;or (i=n) ==>右移→;
4. (i<n) ==>右上↗;
5.返回第一步
6.......
代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #include<iomanip> 6 #include<cstring> 7 #include<cctype> 8 #include<algorithm> 9 using namespace std; 10 int a[10][10]; 11 int n; 12 int prin(int e)//c 13 { 14 for(int i=1; i<=e; i++) { 15 for(int j=1; j<=e; j++) 16 cout<<a[i][j]<<' '; 17 cout<<endl; 18 } 19 return 0; 20 } 21 int main() 22 { 23 cin>>n; 24 int x=1,i=1,j=1,m=1; 25 while(m<=n) { 26 a[i][j]=x; 27 if(j<n) j++; 28 else if(j==n) i++; 29 x++; 30 while(i<n&&j>1) { 31 a[i][j]=x; 32 i++; 33 j--; 34 x++; 35 } 36 a[i][j]=x; 37 if(i<n) i++; 38 else if(i==n) j++; 39 x++; 40 while(i>1&&j<n) { 41 a[i][j]=x; 42 i--; 43 j++; 44 x++; 45 } 46 m++; 47 } 48 prin(n); 49 return 0; 50 }
原创