24:蛇形填充数组
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
用数字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 /*2016年12月6日openjudge日常水题 2 ————1.8.24 By Lxzy_Zby*/ 3 #include<cstdio> 4 using namespace std; 5 int a[15][15],x,y; 6 int main() 7 { 8 int n,t=1; 9 bool k=1,m=0;//设置bool变量,k表示 左下右上线,m表示上下两个三角形 10 scanf("%d",&n); 11 while(m==0)//m=0时处理对角线以上的三角形 12 { 13 if(k==1)//k=1时 14 { 15 16 while(x>=0) 17 { 18 if(y==n-1&&x==0)//上下两三角形分割线 19 { 20 a[x][y]=t; 21 t++; 22 x++; 23 m=1; 24 k=0; 25 break; 26 } 27 a[x][y]=t; 28 t++; 29 if(x-1>=0&&y+1<n) 30 { 31 x--; 32 y++; 33 } 34 else 35 { 36 y++; 37 k=0; 38 x--; 39 } 40 } 41 if(m==0) 42 x++; 43 continue; 44 } 45 if(k==0)//k=0时 46 { 47 while(y>=0) 48 { 49 if(y==0&&x==n-1)//上下两三角形分割线 50 { 51 a[x][y]=t; 52 t++; 53 y++; 54 m=1; 55 k=1; 56 break; 57 } 58 a[x][y]=t; 59 t++; 60 if(y-1>=0&&x+1<n) 61 { 62 x++; 63 y--; 64 } 65 else 66 { 67 x++; 68 y--; 69 k=1; 70 } 71 } 72 if(m==0) 73 y++; 74 continue; 75 } 76 } 77 while(m==1&&t<=n*n)//下三角形 78 { 79 if(k==0)//k=0 80 { 81 while(x<n&&t<=n*n) 82 { 83 a[x][y]=t; 84 t++; 85 if(x+1<n&&y-1>=0) 86 { 87 x++; 88 y--; 89 } 90 else 91 { 92 y++; 93 x++; 94 k=1; 95 } 96 } 97 x--; 98 continue; 99 } 100 if(k==1)//k=1 101 { 102 while(y<n&&t<=n*n) 103 { 104 a[x][y]=t; 105 t++; 106 if(y+1<n&&x-1>=0) 107 { 108 x--; 109 y++; 110 } 111 else 112 { 113 y++; 114 x++; 115 k=0; 116 } 117 } 118 y--; 119 continue; 120 } 121 122 } 123 for(int i=0;i<n;i++) 124 { 125 for(int j=0;j<n;j++) 126 printf("%d ",a[i][j]); 127 printf("\n"); 128 129 } 130 return 0; 131 }
时间: 2024-10-10 15:07:12