楼上的你- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 螺旋矩阵
- {
- class Program
- {
- static void Main(string[] args)
- {
- /*
- 思路:
- 从样例给中的矩阵也就是n=7的时候,我们可以发现以下规律:
- * //第一圈
- * 1向右走1步就可以达到2
- * 然后2向下走1步可以达到3
- * 然后3向左走2步可以到5
- * 然后5向上走2步可以达到7
- //第二圈
- * 7向右走3步就可以达到10
- * 然后10向下走3步可以达到13
- * 然后13向左走4步可以到17
- * 然后17向上走4步可以达到21
- ==============================
- 得出
- 向右走的步数为1,3,5,7 ...2*n+1;
- 向下走的步数为1,3,5,7 ...2*n+1;
- 向左走的步数为2,4,6,8 ...2*n;
- 向上走的步数为2,4,6,8 ...2*n;
- 然后就是根据此规律得出一个螺旋矩阵
-
- *
- */
- Console.WriteLine("请输入n的值");
- string str = Console.ReadLine();
- int n, i, j;
- //定义一个二维数组a
- int [,]a=new int[100,100];
- //定义一个string数组s
- string[,] s = new string[100, 100];
- bool flag=int.TryParse(str, out n);
- if (flag)
- {
- //数组初始化
- for ( i = 1; i <=n; i++)
- {
- for (j = 1; j <=n; j++)
- {
- a[i, j] = 0;
- }
- }
- //posI,posJ表示1的初始位置
- int posI = (n + 1) / 2;
- int posJ = (n + 1) / 2;
- a[posI, posJ] = 1;
- int k = 1,f=0;//k表示从1开始到n*n,f计数
- while (k<=n*n)
- {
- //向右1 3 5 7
- for (i = 1; i <= 2 * f + 1; i++)
- a[posI, ++posJ] = ++k;
- //向下1 3 5 7
- for (i = 1; i <= 2 * f + 1; i++)
- a[++posI, posJ] = ++k;
- //向左2 4 6 8
- for (i = 1; i <= 2 *(f+1) ; i++)
- a[posI, --posJ] = ++k;
- //向上2 4 6 8
- for (i = 1; i <= 2 *(f + 1); i++)
- a[--posI, posJ] = ++k;
- f++;
- }
- Console.WriteLine("得到的图形为:");
- for (i = 0; i <n + 2; i++)
- s[0, i] = "*";
- for (i = 1; i <= n; i++)
- {
- s[i, 0] = "*";
- for (j = 1; j <= n; j++)
- {
-
- s[i, j] = a[i, j].ToString();
- }
- s[i , n+1] = "*";
- }
- for (i = 0; i < n + 2; i++)
- s[n+1, i] = "*";
- for (i = 0; i < n + 2; i++)
- {
- for (j = 0; j <n + 2; j++)
- {
- Console.Write("{0,-8}",s[i,j]);
- }
- Console.WriteLine();
- }
- }
-
- }
- }
- }
复制代码 |