打印一个“回”字图形的算法

来源:互联网 发布:知乎 兵哥哥有毒 编辑:程序博客网 时间:2024/05/01 06:11
要求效果:

输出1
-------
222
212
222
-------
33333
32223
32123
32223
33333
-------
4444444
4333334
4322234
4321234
4322234
4333334
4444444
-------
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
-------
66666666666
65555555556
65444444456
65433333456
65432223456
65432123456
65432223456
65433333456
65444444456
65555555556
66666666666
-------
7777777777777
7666666666667
7655555555567
7654444444567
7654333334567
7654322234567
7654321234567
7654322234567
7654333334567
7654444444567
7655555555567
7666666666667
7777777777777
-------
888888888888888
877777777777778
876666666666678
876555555555678
876544444445678
876543333345678
876543222345678
876543212345678
876543222345678
876543333345678
876544444445678
876555555555678
876666666666678
877777777777778
888888888888888
-------
99999999999999999
98888888888888889
98777777777777789
98766666666666789
98765555555556789
98765444444456789
98765433333456789
98765432223456789
98765432123456789
98765432223456789
98765433333456789
98765444444456789
98765555555556789
98766666666666789
98777777777777789
98888888888888889
99999999999999999
-------



我的算法:
  1. private static void Print(int n)
  2. {
  3.     int rank = GetRank(n);
  4.     int[,] matrix = new int[rank, rank];

  5.     for (int i = n; i > 0; i--)
  6.     {
  7.         SetMatric(matrix, rank, i);
  8.     }

  9.     PrintResult(rank, matrix);
  10. }
  11. private static int GetRank(int n)
  12. {
  13.     return n * 2 - 1;
  14. }

  15. private static void SetMatric(int[,] matrix, int rank, int n)
  16. {
  17.     int row1 = Number - n;
  18.     int row2 = rank - (Number - n) - 1;
  19.     int colOffice = Number - n;
  20.     int count = GetRank(n);

  21.     for (int i = 0; i < count; i++)
  22.     {
  23.         matrix[row1, colOffice + i] = n;  // 上面行
  24.         matrix[row2, colOffice + i] = n;// 下面行

  25.         if (i < count - 2)
  26.         {
  27.             matrix[row1 + i + 1, colOffice] = n;// 左列
  28.             matrix[row1 + i + 1, rank - colOffice - 1] = n;// 右列
  29.         }
  30.     }
  31. }

  32. private static void PrintResult(int rank, int[,] matrix)
  33. {
  34.     for (int i = 0; i < rank; i++)
  35.     {
  36.         for (int j = 0; j < rank; j++)
  37.         {
  38.             Console.Write(matrix[i, j]);
  39.         }
  40.         Console.Write(Environment.NewLine);
  41.     }
  42. }
牛人算法:
  1. static void printbox(int num)
  2. {
  3.     for (int i = 0; i < num * 2 - 1; i++)
  4.     {
  5.         for (int j = 0; j < num * 2 - 1; j++)
  6.         {
  7.             Console.Write(Math.Max(Math.Abs(i - num + 1), Math.Abs(j - num + 1)) + 1);
  8.         }
  9.         Console.WriteLine();
  10.     }
  11. }


原创粉丝点击