回型矩阵

回型矩阵

https://ac.nowcoder.com/acm/problem/22230

  • 题目描述
    给你一个整数n,按要求输出n∗n的回型矩阵

  • 输入描述:
    输入一行,包含一个整数n (1<=n<=19)

  • 输出描述:
    输出n行,每行包含n个正整数

  • 示例1
    输入:4
    输出:
    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7

  • 解题思路:
    主要考察的就是对于边界情况的判断,需要建立 n * n 的矩阵 arr 存储值,并且声明一个变量 k ,随着循环自增,每次循环的 k 值存储在 arr 内,最后再将 arr 数组按行打印即可。 while 循环的终止条件即为 k > n * n,并且要注意四个 for 循环中,必须有两个 for 循环(分别为左右循环和上下循环)的终止条件取等号,目的是确保能够到达循环终止前最后一个会使边界重叠的位置。

  • C# 代码:

    using System;
    class Program{
      static void Main(){
          string input;
          while((input = Console.ReadLine()) != null){
              int n = int.Parse(input);
              int[][] arr = new int[n][];
              for(int i = 0; i < n; i++) arr[i] = new int[n];
              int k = 1;
              int up = 0, down = n-1, left = 0, right = n-1;
              while (k <= n * n){
                  for (int i = left; i < right; i++) arr[up][i] = k++;
                  for (int i = up; i <= down; i++) arr[i][right] = k++;
                  for (int i = right-1; i >= left; i--) arr[down][i] = k++;
                  for (int i = down-1; i > up; i--) arr[i][left] = k++;
                  up++;
                  left++;
                  down--;
                  right--;
              }
              for(int i = 0; i < n; i++){
                  for(int j = 0; j < n; j++) Console.Write(arr[i][j] + " ");
                  Console.WriteLine();
              }
          }
      }
    }
全部评论

相关推荐

拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务