打印回型矩阵
n=1 n=2 n = 3
3 2 4 3 2 15 14 13 12
0 1 5 0 1 4 3 2 11
6 7 8 5 0 1 10
6 7 8 9
如何打印这个回型数据?
现在只实现了如何打印偶数位的,因为奇偶数的最大值不同,但是基本思路还是一样的。自己要用的可以再写。
奇数的最大值((n+1)*(n+1) - 1)在左上角,而偶数的是在右下角。
1 private static void GetTheGUIFromCount(int v_int, ref int[,]v_arr) 2 { 3 int[,] lv_arry= new int[v_int+1, v_int+1]; 4 5 //临时行数 6 int lv_TempRow = 0; 7 8 //临时列数 9 int lv_TempCol = 0; 10 11 //记录当前最大没有被填充的行数 12 int lv_maxRow = 0; 13 14 //记录当前最小没有被填充的行数 15 int lv_minRow = 0; 16 17 //记录当前最大没有被填充的列数 18 int lv_maxCol = 0; 19 20 //记录当前最小没有被填充的列数 21 int lv_minCol = 0; 22 23 //赋值数据 24 int i = 0; 25 26 //偶数打印,其最大值在右下角 27 if (v_int % 2 == 0) 28 { 29 i = (v_int+1)*(v_int+1)-1; 30 lv_TempRow = v_int; 31 lv_TempCol = v_int; 32 lv_maxRow = v_int; 33 lv_maxCol = v_int; 34 lv_arry[lv_TempRow, lv_TempCol] = i; 35 while (i != 0) 36 { 37 //从右向左填充数据 38 if (lv_TempCol == lv_maxCol && lv_TempRow == lv_maxRow) 39 { 40 //设置最小列数 41 while (lv_arry[lv_TempRow, lv_minCol] != 0 && lv_minCol < v_int) 42 lv_minCol++; 43 while (lv_minCol < lv_TempCol) 44 { 45 lv_TempCol--; 46 i--; 47 lv_arry[lv_TempRow, lv_TempCol] = i; 48 } 49 } 50 51 //从下到上方向填充数据 52 if (lv_TempCol == lv_minCol && lv_TempRow == lv_maxRow) 53 { 54 //设置最小行数 55 while (lv_arry[lv_minRow, lv_TempCol] != 0 && lv_minRow < v_int) 56 lv_minRow++; 57 while (lv_minRow < lv_TempRow) 58 { 59 lv_TempRow--; 60 i--; 61 lv_arry[lv_TempRow, lv_TempCol] = i; 62 } 63 64 } 65 66 //从左到右填充数据 67 if (lv_TempCol == lv_minCol && lv_TempRow == lv_minRow) 68 { 69 while (lv_arry[lv_TempRow, lv_maxCol] != 0 && lv_maxCol >0) 70 lv_maxCol--; 71 while (lv_maxCol > lv_TempCol) 72 { 73 lv_TempCol++; 74 i--; 75 lv_arry[lv_TempRow, lv_TempCol] = i; 76 } 77 } 78 79 //从上到下填充数据 80 if (lv_TempCol == lv_maxCol && lv_TempRow == lv_minRow) 81 { 82 while (lv_arry[lv_maxRow, lv_TempCol] != 0 && lv_maxRow>0) 83 lv_maxRow--; 84 while (lv_maxRow > lv_TempRow) 85 { 86 lv_TempRow++; 87 i--; 88 lv_arry[lv_TempRow, lv_TempCol] = i; 89 } 90 } 91 } 92 } 93 94 v_arr = lv_arry; 95 }